2010-09-29 2 views
4

Existe-t-il un moyen d'obtenir le nombre de gestionnaires d'événements attachés à un événement? Le problème est que quelque part dans le code, il continue à attacher des gestionnaires à un événement, comment cela peut-il être résolu?Gestionnaires d'événements C#

Répondre

10

Il est possible d'obtenir une liste de tous les abonnés en appelant GetInvocationList()

public class Foo 
{ 
    public int GetSubscriberCount() 
    { 
     var count = 0; 
     var eventHandler = this.CustomEvent; 
     if(eventHandler != null) 
     { 
      count = eventHandler.GetInvocationList().Length; 
     } 
     return count; 
    } 

    public event EventHandler CustomEvent; 
} 
0

Vous pouvez implémenter votre propre événement ajouter/supprimer des méthodes:

private EventHandler _event; 

public event EventHandler MyEvent 
{ 
    add 
    { 
    if (_event == null) _event = value; 
    _event += value; 
    } 

    remove 
    { 
    if (_event != null) _event -= value; 
    } 
} 
0

Vous pouvez remplacer le add- et de supprimer - opération (+ = et - =) pour l'événement comme vu dans le code suivant:

private int count = 0; 
public event EventHandler MyEvent { 
    add { 
     count++; 
     // TODO: store event receiver 
    } 
    remove { 
     count--; 
     // TODO: remove event receiver 
    } 
} 
Questions connexes