2010-10-30 58 views
26

假设我已经声明如何计算有多少个侦听器挂钩到事件?

public event EventArgs<SyslogMessageEventArgs> MessageReceived; 

public int SubscribedClients 
{ 
    get [...] 
} 

我想看看有多少“订阅的客户端”我的课了。我需要通过我的API(未在片段中显示)加上那些通过channel.MessageReceived+=myMethod;进行订阅的那些订阅网络。我知道可以用addremove语句明确声明C#事件,在那里我肯定可以将+或-1计数到本地计数器,但我从来没有在C#中为显式事件编写代码,所以我没有确切地知道在添加和删除而不是更新计数器时还需要​​执行什么操作。

谢谢。

回答

53
MessageReceived.GetInvocationList().Length 
+16

你最好添加一个空测试。 – 2010-10-30 12:34:51

+2

如果使用空的委托初始化事件,则无需执行空测试。但是,计数长度将为1.公共事件EventArgs MessageReceived = delegate {}; – 2015-02-17 19:17:07