2010-10-26 70 views
1

我正在处理一些事件驱动的代码。在我的系统的一个组件中,有时会出现一个事件,我目前没有处理程序。有没有办法让事件“等待”,直到有一个处理程序可用?C#正在等待事件

感谢,

PM

+0

您是否还需要执行该事件?或者稍后分配给处理程序?如果它稍后分配了处理程序,为什么不在通话之前分配处理程序? – Entity 2010-10-26 02:06:46

+0

对不起,让我重新解释一下:事件E发生了。我只有一个C类可以处理E,但是此时没有这个类的活动实例,所以当E被提出时,它看不到任何订户,并且什么也没有发生。有一种方法可以在创建C实例后立即处理E? – user472875 2010-10-26 02:12:49

回答

3

有在C#中没有内置的机制来排队事件,并派遣他们作为处理器连接。当一些有趣的活动发生时,事件会同步发生......“等待”处理程序将需要该进程阻止。

您可以通过在班级中提供custom implementation of the event member来实现自己的事件排队。您需要一个单独的数据结构来缓存先前“引发”事件的相关信息,并将它们排队等候处理程序附加。

与上述方案中的麻烦,是,虽然有可能是极不寻常的和有点混乱。大多数开发人员不希望以这种方式提出事件。事实也很复杂,如果大量事件发生时没有附加的处理程序,则最终可能会使用大量内存来存储永远不会分派的事件。就个人而言,我通常会建议避免这样的设计。