如何检查是否分配事件处理程序

时间:2010-06-20 16:14:24

标签: c# event-handling

我之前的问题是how to clear event handles in c#

现在我需要知道如何检查已分配的任何事件处理程序?

4 个答案:

答案 0 :(得分:1)

如果事件与您进行检查的同一个班级相同,则可以与null进行比较。但如果情况并非如此,你应该问问自己为什么要关心班级的内部运作。我的意思是这个类的工作包含关注其订阅者的事件而不是相反的。但是如果你真的想要这些信息,那么包含类的事件可以为外界公开一个属性 - 比如HasEventHandlers

答案 1 :(得分:0)

除非我误解了这个问题,否则对null进行简单检查就足够了。在调用任何事件处理程序之前,总是需要在事件处理程序中检查null。

答案 2 :(得分:0)

在快速观察窗口中,我找到了 btnSubmit 点击处理程序,其中包含以下表达式:

(((System.Web.UI.Control)(btnSubmit)).Events.head.handler).Method

答案 3 :(得分:0)

由Jon Skeet提供的旧solution,您明确实施事件处理将是解决此问题的最佳方法。

以下是:

private EventHandler m_myEvent;

public event EventHandler OnEvent
{
    add
    {
        // First try to remove the handler, then re-add it
        m_myEvent -= value;
        m_myEvent += value;
    }
    remove
    {
        m_myEvent -= value;
    }
}

在不太可能存在多播代理的情况下,您可能会遇到奇怪的行为。