Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 事件是否可以用作事件侦听器?_C#_Events - Fatal编程技术网

C# 事件是否可以用作事件侦听器?

C# 事件是否可以用作事件侦听器?,c#,events,C#,Events,我试图从我正在创建的对象中包含的私有对象中公开一些事件,看起来编译器对此很满意: private WindowUpdateServer _windowUpdateServer; public event WindowUpdateHandler WindowUpdated; public RecieveWindowFramesManager() { _windowUpdateServer = new WindowUpdateServer(); _windowUpdateSe

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

private WindowUpdateServer _windowUpdateServer;

public event WindowUpdateHandler WindowUpdated;

public RecieveWindowFramesManager() {

    _windowUpdateServer = new WindowUpdateServer();

    _windowUpdateServer.ExistingWindowUpdated += WindowUpdated; // ExistingWindowUpdated is a WindowUpdateHandler
}
但在接收到WindowFramesManager初始化后_windowUpdateServer.ExistingWindowUpdated==null

我是不是遗漏了什么——这似乎应该有用


值得注意的是,在ReceiveWindowFramesManager初始化后,我将事件侦听器附加到WindowUpdated,但它从未被调用(即使触发了\u windowUpdateServer.ExistingWindowUpdated)。

我不确定,但我认为这只会从WindowUpdated事件中分配这些处理程序,在+=操作发生时设置的。因为它是一个构造函数,所以列表是空的。若要执行所需操作,请为ExistingWindowUpdated创建自己的事件处理程序,并从此处启动WindowUpdated事件。

我将执行以下操作:

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

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

Nice!比我的解决方案更优雅!我刚试过这个,效果很好。非常好的解决方案。再次感谢您的解释。ArildF的解决方案在我的情况下非常有效——因此我接受了他的答案,认为它更合适。