2013-04-07 32 views
0

有一个在msdn当是有必要手动递减的事件处理程序

与线小的事件处理程序例如:

myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten); 

据推测,这增加了所述触发事件的队列进行处理。什么从队列中删除处理程序?我甚至需要考虑这个吗?

+0

我改变了逻辑,使行只写一次,而不是在循环内。不再需要从队列中移除事件。 – Kal 2013-04-08 18:14:28

回答

3

“ - =”运营商从发行商中删除订户。当事件的发行商将比订户的寿命更长时,不解除订阅是一个问题。

更多信息herehere

+0

因此,在所引用的例子中,我将在Signal.Set()的正上方添加 - =条目,否则与+ =版本相同。线?在我的情况下,这将是一个可以长时间运行的Windows服务的一部分,而处理程序将在一秒钟左右完成。 – Kal 2013-04-08 05:58:41

+0

@Kal:不,“myNewLog”位于不同的范围,所以您无法在“MyOnEntryWritten”中访问它。在signal.WaitOne()之后取消订阅是有意义的(如果你想将AutoResetEvent设置为[signaled state](http://msdn.microsoft.com/en-us/library/system.threading .autoresetevent.aspx)只有一次)。 – victorph 2013-04-08 12:29:26

+0

因为我想让事件重复发生,你是说我不应该设置 - =?这种问题将问题带回整个圈子。 – Kal 2013-04-08 15:16:43

相关问题