事件可以用作事件监听器吗?

时间:2009-11-14 11:04:23

标签: c# events

我正在尝试从我正在创建的对象中包含的私有对象中公开一些事件,看起来编译器对此很满意:

private WindowUpdateServer _windowUpdateServer;

public event WindowUpdateHandler WindowUpdated;

public RecieveWindowFramesManager() {

    _windowUpdateServer = new WindowUpdateServer();

    _windowUpdateServer.ExistingWindowUpdated += WindowUpdated; // ExistingWindowUpdated is a WindowUpdateHandler
}

但RecieveWindowFramesManager初始化后_windowUpdateServer.ExistingWindowUpdated == null。

我在这里遗漏了什么 - 看来这应该有效吗?

值得注意的是,在RecieveWindowFramesManager初始化之后,我将一个事件监听器附加到WindowUpdated但它永远不会被调用(即使_windowUpdateServer.ExistingWindowUpdated被触发)。

2 个答案:

答案 0 :(得分:6)

我不确定,但我认为这只会分配来自WindowUpdated事件的处理程序,这些处理程序是在+ =操作发生时设置的。由于它是构造函数,因此列表为空。要做你想做的事,为ExistingWindowUpdated创建自己的事件处理程序,并从那里激活WindowUpdated事件。

答案 1 :(得分:4)

我会做这样的事情:

public event WindowUpdateEventHandler WindowUpdated
{ 
    add{ _windowUpdateServer.ExistingWindowUpdated += value; }
    remove{ _windowUpdateServer.ExistingWindowUpdated -= value; }
}

如果您实际上在事件处理程序中使用sender参数,则会出现一些问题;它会指向内部对象,而不是你从中得到事件的对象。

相关问题