有没有办法让附加事件处理程序的数量达到事件?问题是代码中的某个地方继续将处理程序附加到事件中,如何解决这个问题?
答案 0 :(得分:10)
可以通过致电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;
}
答案 1 :(得分:0)
您可以实现自己的事件添加/删除方法:
private EventHandler _event;
public event EventHandler MyEvent
{
add
{
if (_event == null) _event = value;
_event += value;
}
remove
{
if (_event != null) _event -= value;
}
}
答案 2 :(得分:0)
您可以覆盖事件的添加和删除操作(+ =和 - =),如以下代码所示:
private int count = 0;
public event EventHandler MyEvent {
add {
count++;
// TODO: store event receiver
}
remove {
count--;
// TODO: remove event receiver
}
}