订阅后事件触发

use*_*710 3 c# events timer event-handling

我有一个包含队列的类和一个包含列表框的表单。

当用户打开表单时,它会从队列中获取所有累积的对象并将它们显示在列表框中。当队列获得新项目时表单立即打开时,它通过自定义事件通知新项目的表单。

关闭表单后,数据将再次累积。

我的问题如下:一旦表单订阅了通知事件,它应该将所有队列转储到表单中,并且只要有人订阅了该事件就继续转储它。它不应该等到另一个项目添加到队列中。

一种解决方案是使用计时器来检查是否有任何对该事件的订阅,然后将其转储。这并不多,但我会浪费计时器的资源。

如果表单对事件的订阅本身可以触发事件,那似乎会更好。该应用程序非常模块化,模块通过事件与 eventNexus 通信,然后联系通知需要知道的每个人。

由于事件也是一个对象,因此应该可以完成这样的事情,但我没有找到任何链接。

Joh*_*mse 6

您可以使用addandremove语句在事件本身的代码中自定义添加和删除事件处理程序:

private EventHandler onMyEvent;
public event MyEventHandler MyEvent
{
    add
    {
        // run when event handler is added ( += )
        onMyEvent = (MyEventHandler)Delegate.Combine(onMyEvent, value);

        // Add additional, custom logic here...
    }

    remove
    {
        // run when event handler is removed ( -= )
        onMyEvent = (MyEventHandler)Delegate.Remove(onMyEvent, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处添加自己的代码以在添加或删除事件处理程序时触发操作。