Partager via


Exposition d'événements de gestion

Pour qu'une application devienne gérable, le développeur peut identifier dans cette application certaines conditions dans lesquelles il convient de déclencher un événement de gestion afin de notifier d'éventuels consommateurs (par exemple une condition d'erreur, un changement d'état, etc.).

L'espace de noms System.Management.Instrumentation fournit quelques classes pour l'exposition d'événements de gestion. Pour exposer un événement :

  • Marquez la classe avec l'attribut InstrumentationClass(InstrumentationType.Event) afin de l'identifier comme événement de gestion.
  • Au lieu d'utiliser un attribut, dérivez la classe de la classe BaseEvent pour l'identifier comme événement de gestion (cette méthode est aussi plus efficace en termes de performances).

Pour déclencher un événement, créez une instance de la classe d'événement, affectez des valeurs aux propriétés et, selon la méthode que vous avez choisie pour déclarer l'événement, utilisez la méthode d'assistance Instrumentation.Fire() ou BaseEvent::Fire().

L'exemple de code suivant montre comment créer une classe d'événement de gestion en la dérivant de la classe BaseEvent et comment déclencher l'événement de gestion à partir du code managé.

using System;
using System.Management;
using System.Configuration.Install;
using System.Management.Instrumentation;

// This example demonstrates how to create a management event class by deriving
// from the BaseEvent class and to raise a management event from managed code.

// Specify which namespace the management event class is created in
[assembly:Instrumented("Root/Default")]

// Let the system know you will run InstallUtil.exe utility against 
// this assembly
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}   

// Create a management instrumentation event class
public class MyEvent : System.Management.Instrumentation.BaseEvent {
    public string Event_Name;
}

public class Sample_EventProvider {
    public static int Main(string[] args) {
        MyEvent e = new MyEvent();
        e.Event_Name = "Hello";
        // Raise a management event
        Instrumentation.Fire(e); 
        return 0;
    }
} 

L'exemple suivant montre comment créer une classe d'événement de gestion en utilisant l'attribut InstrumentationClass et déclencher un événement de gestion à partir du code managé.

using System;
using System.Management;
using System.Configuration.Install;
using System.Management.Instrumentation;

// This example demonstrates how to create a management event class by using
// the InstrumentationClass attribute and to raise a management event from 
// managed code.

// Specify which namespace the management event class is created in
[assembly:Instrumented("Root/Default")]

// Let the system know you will run InstallUtil.exe utility against 
// this assembly
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}   

// Create a management instrumentation event class
[InstrumentationClass(InstrumentationType.Event)]
public class MyEvent {
    public string Event_Name;
}

public class WMI_InstrumentedEvent_Example {
    public static void Main() {
        MyEvent e = new MyEvent();
        e.Event_Name = "Hello";
        // Raise a management event
        Instrumentation.Fire(e); 
        return;
    }
}

Voir aussi

Instrumentation des applications .NET Framework avec System.Management | Classes et mappage dans CLI et WMI | Exposition de données de gestion | Héritage | Inscription du schéma pour une application instrumentée