2013-04-07 86 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

相關問題