首页 > 解决方案 > C# 事件处理程序永远不会获得订阅者

问题描述

我有一个控制器类和一个管理器类。

我希望我的经理类从我的控制器调用一个函数来触发一个事件。

我的控制器看起来像这样:

public class Controller{
    public Controller(Mgr mgr)
    {
        m_mgr = mgr;
        m_mgr.schedulerReload += reloadScheduler;
    }

    void reloadScheduler(object sender, EventArgs e)
    {
        ReloadSchedulerQueue();
    }
}

其中 ReloadSchedulerQueue 是我想从我的事件中触发的函数。

我的经理班看起来像这样

public class Manager{
    public event EventHandler schedulerReload;

    public void somefunction() {
      //do something
      schedulerReload(this, EventArgs.Empty);
    }
}

每当我运行它时,我可以看到 schedulerReload 事件正在获得一个空引用异常,我假设是因为没有人订阅我的事件。但是,在单步执行代码时,我可以清楚地看到构造函数和行

m_mgr.schedulerReload += reloadScheduler;

在调用 somefunction() 之前明显被多次命中。我知道我可以通过在调用它之前检查我的事件处理程序来处理这个异常,但我不知道为什么我的事件处理程序没有被订阅。

我在这里想念什么?

标签: c#.netevent-handling

解决方案


推荐阅读