C#事件处理程序

4
有没有一种方法可以获取事件附加的处理程序数量?问题在于,在代码的某个地方,它继续将处理程序附加到事件中,如何解决这个问题?
3个回答

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;
}

0

您可以实现自己的事件添加/删除方法:

private EventHandler _event;

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

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

0

您可以重写事件的添加和删除操作(+= 和 -=),如下面的代码所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接