Comment : s'abonner et annuler l'abonnement à des événements (Guide de programmation C#)

Vous vous abonnez un événement qui est publié par une autre classe lorsque vous souhaitez écrire un code personnalisé qui est appelé lorsque cet événement est déclenché. Par exemple, vous pouvez vous abonner à l'événement « clic » d'un bouton pour que votre application exécute une action lorsque l'utilisateur clique sur le bouton.

Pour s'abonner des événements à l'aide de l'IDE Visual Studio 2005

  1. Si la fenêtre Propriétés n'est pas visible, en mode Design, cliquez avec le bouton droit sur le formulaire ou le contrôle pour lequel vous souhaitez créer un gestionnaire d'événements et sélectionnez Propriétés.

  2. Dans la partie supérieure de la fenêtre Propriétés, cliquez sur le bouton Événements.

  3. Double-cliquez sur l'événement que vous souhaitez créer, par exemple l'événement Load.

    Visual C# crée une méthode de gestionnaire d'événements vide et l'ajoute à votre code. Vous pouvez également ajouter à la main le code en mode Code. Par exemple, les lignes de code ci-après déclarent une méthode de gestionnaire d'événements qui est appelée lorsque la classe Form déclenche l'événement Load.

    private void Form1_Load(object sender, System.EventArgs e)
    {
        // Add your form load event handling code here.
    }
    

    La ligne de code nécessaire pour s'abonner à l'événement est également générée automatiquement dans la méthode InitializeComponent du fichier Form1.Designer.cs de votre projet. Elle se présente ainsi :

      this.Load += new System.EventHandler(this.Form1_Load);
    

Pour s'abonner à des événements par programme

  1. Définissez une méthode de gestionnaire d'événements dont la signature correspond à la signature du délégué pour l'événement. Par exemple, si l'événement est basé sur le type délégué EventHandler, le code suivant représente le stub de méthode :

      void HandleCustomEvent(object sender, CustomEventArgs a)
      {
         // Do something useful here.
      }
    
  2. Utilisez l'opérateur d'assignation d'addition (+ =) pour attacher votre gestionnaire d'événements à l'événement. Dans l'exemple suivant, supposez qu'un objet intitulé publisher possède un événement nommé RaiseCustomEvent. Notez que la classe d'abonné a besoin d'une référence à la classe d'éditeur pour s'abonner à ses événements.

    publisher.RaiseCustomEvent += HandleCustomEvent;
    

Notez que la syntaxe ci-dessus est nouvelle en C# 2.0. Elle équivaut exactement à la syntaxe C# 1.0 dans laquelle le délégué d'encapsulation doit être explicitement créé à l'aide du mot clé new :

publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

Pour s'abonner des événements en utilisant une méthode anonyme

  • Utilisez l'opérateur d'assignation d'addition (+ =) pour attacher votre méthode anonyme à l'événement. Dans l'exemple ci-après, supposez qu'un objet intitulé publisher possède un événement nommé RaiseCustomEvent et qu'une classe CustomEventArgs a également été définie pour retenir quelque type d'informations spécialisées sur l'événement. Notez que la classe d'abonné a besoin d'une référence à publisher pour s'abonner à ses événements.

      publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)
      {
        string s = o.ToString() + " " + e.ToString();
        Console.WriteLine(s);
      };
    

Il importe de noter qu'il n'est pas aisé d'annuler un abonnement à un événement si vous avez utilisé une méthode anonyme pour vous y abonner. Pour annuler un abonnement dans ce cas, revenez dans le code où vous vous abonnez à l'événement, stockez la méthode anonyme dans une variable de type délégué, puis ajoutez le délégué à l'événement.

Annulation d'un abonnement

Annulez simplement un abonnement à l'événement pour empêcher votre gestionnaire d'événements d'être appelé lorsque l'événement est déclenché. Pour empêcher toute fuite de ressources, il importe d'annuler un abonnement aux événements avant d'éliminer un objet d'abonné. Tant que vous n'avez pas annulé l'abonnement à un événement, le délégué multicast sous-jacent à l'événement de l'objet d'édition possède une référence au délégué qui encapsule le gestionnaire d'événements de l'abonné. Aussi longtemps que l'objet de l'édition détient cette référence, votre objet d'abonné ne sera pas récupéré par le garbage collector.

Pour annuler un abonnement à un événement

  • Utilisez l'opérateur d'assignation de soustraction (-=) pour annuler un abonnement à un événement :

      publisher.RaiseCustomEvent -= HandleCustomEvent;
    

    Lorsque tous les abonnés ont annulé leur abonnement à un événement, l'instance d'événement de la classe d'éditeur est définie avec la valeur null.

Voir aussi

Tâches

Comment : publier des événements conformes aux indications du .NET Framework (Guide de programmation C#)

Référence

event (Référence C#)
-=, opérateur (Référence C#)
+=, opérateur (Référence C#)

Concepts

Événements (Guide de programmation C#)