我正在尝试从我正在创建的对象中包含的私有对象中公开一些事件,看起来编译器对此很满意:
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被触发)。
答案 0 :(得分:6)
我不确定,但我认为这只会分配来自WindowUpdated事件的处理程序,这些处理程序是在+ =操作发生时设置的。由于它是构造函数,因此列表为空。要做你想做的事,为ExistingWindowUpdated创建自己的事件处理程序,并从那里激活WindowUpdated事件。
答案 1 :(得分:4)
我会做这样的事情:
public event WindowUpdateEventHandler WindowUpdated
{
add{ _windowUpdateServer.ExistingWindowUpdated += value; }
remove{ _windowUpdateServer.ExistingWindowUpdated -= value; }
}
如果您实际上在事件处理程序中使用sender参数,则会出现一些问题;它会指向内部对象,而不是你从中得到事件的对象。