如@Telos所述,从定义类的外部,您只能在a
+=或a 的左侧使用EventHandler
-=。因此,如果您有能力修改定义的类,则可以提供一种方法来检查事件处理程序是否为
null-如果是,则不添加任何事件处理程序。如果不是,那么也许可以遍历Delegate.GetInvocationList中的值
。如果一个等于要添加为事件处理程序的委托,那么您知道它在那里。
public bool IsEventHandlerRegistered(Delegate prospectiveHandler){ if ( this.EventHandler != null ) { foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() ) { if ( existingHandler == prospectiveHandler ) { return true; } } } return false;}并且可以很容易地将其修改为“如果不存在则添加处理程序”。如果您无权访问公开事件的班级内部,则可能需要探索
-=和
+=,如@Lou Franco所建议。
但是,最好重新检查一下调试和停用这些对象的方式,以查看是否找不到自己跟踪这些信息的方法。



