C# 如何检查eventhandler是否已注册

C# 如何检查eventhandler是否已注册,c#,.net,winforms,events,event-handling,C#,.net,Winforms,Events,Event Handling,我有一个类X,这个类有一个事件:EventX 我有一个B类,我将objectX的EventX注册到B类的eventhandler HandlerB X objectX = X.GetStaticObject(); objectX.EventX += HandlerB; 如何检查包含eventhandler HandlerB的objectX的EventX。谢谢 注意:objectX是一个静态全局事件,可以从任何位置使用非对象B的任何对象注册该事件。如果它不为null,则会注册它(尽管它可能使用空

我有一个类X,这个类有一个事件:EventX

我有一个B类,我将objectX的EventX注册到B类的eventhandler HandlerB

X objectX = X.GetStaticObject();
objectX.EventX += HandlerB;
如何检查包含eventhandler HandlerB的objectX的EventX。谢谢


注意:objectX是一个静态全局事件,可以从任何位置使用非对象B的任何对象注册该事件。

如果它不为null,则会注册它(尽管它可能使用空处理程序)


据我所知,你不知道它注册了什么。如果能够在一开始就有一个事件(解耦代码和双重分派),那么就无法做到这一点。

要检查您的HandlerB是否已注册,您可以使用该方法获取适当的信息

编辑:

在V4Vendetta注释之后,我尝试编译代码,但失败了。我稍微改变了一下

为了能够进行该检查,应该将方法测试添加到X中(我假设它是静态的,否则使用它而不是X):

然后在可访问HandlerB的地方进行测试:

X.Test(new EventHandler(HandlerB));

如果要防止为同一事件注册两次事件处理程序,可以在注册之前将其删除,如下所示:

objectX.EventX -= HandlerB; 
objectX.EventX += HandlerB;
这可以在注册代码中完成,甚至可以在事件本身中完成。看一看细节


注意:移除HandlerB不应该失败,即使它以前没有注册过!(除非有人更改显式事件定义中的
remove
部分以执行此操作。)

但是,它可以从任何位置注册,因为objectX是全局对象(静态)。谢谢。我添加了更多信息。请帮帮我。谢谢。@Vendetta:你说得对。我没有在VS中检查它,完全忘记了它可能会导致错误。然而,我编辑代码使其工作。
X.Test(new EventHandler(HandlerB));
objectX.EventX -= HandlerB; 
objectX.EventX += HandlerB;