C # обработчики событий - PullRequest
       1

C # обработчики событий

4 голосов
/ 30 сентября 2010

Есть ли способ получить количество прикрепленных обработчиков событий к событию? Проблема в том, что где-то в коде он продолжает прикреплять обработчики к событию, как это можно решить?

Ответы [ 3 ]

10 голосов
/ 30 сентября 2010

Получить список всех подписчиков можно, позвонив по номеру 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 голосов
/ 30 сентября 2010

Вы можете перезаписать операцию добавления и удаления (+ = и - =) для события, как показано в следующем коде:

private int count = 0;
public event EventHandler MyEvent {
    add {
        count++;
        // TODO: store event receiver
    }
    remove {
        count--;
        // TODO: remove event receiver
    }
}
0 голосов
/ 30 сентября 2010

Вы можете реализовать свои собственные методы добавления / удаления событий:

private EventHandler _event;

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

  remove 
  {
    if (_event != null) _event -= value;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...