2011-01-27 49 views
0

我目前遇到了我剛纔創建的事件日誌監視器的問題。C#同時忽略的事件

我的應用程序訂閱EventLog的EntryWritten事件。 我注意到,如果多個事件同時發生(同一秒內),只有其中一個引發觸發我的事件處理程序的事件。

_eventLog = new System.Diagnostics.EventLog(_logName); 
_eventLog.EntryWritten += new EntryWrittenEventHandler(eventlog_EntryWritten); 
_eventLog.EnableRaisingEvents = true; 

是否有可能避免這種行爲,所以我eventlog_EntryWritten方法將被調用爲記錄到事件日誌的所有事件?

回答

1

事件通常不會在異步模式下運行,所以如果eventlog_EntryWritten沒有在另一個事件之前完成,您可能會錯過事件。在火中提升自己的異步事件並忘記方法。我不確定,但可能會更有效。或者讓你自己的班級使用輪詢機制來讀取事件。

2

這更糟糕的是 - 這是一個五個秒鐘時間間隔內:

的系統響應WriteEntry只有在發生至少五秒鐘,最後寫事件之前。這意味着即使發生多個事件日誌更改,您也只會在5秒內收到一個EntryWritten事件通知。

(從EventLog.EntryWritten

如果您需要跟蹤的所有事件,然後(如果他們是你的),我建議將圍繞WriteEntry的包裝功能,可以捕獲所有的條目他們」前甚至寫入日誌。

+0

+1最後的建議。當你不需要的時候不要使用事件。 – 2011-01-27 13:16:38

+0

我也發現,但似乎並非如此。他們不是我的事件。我發現了一個例子,其中兩個事件在4秒內發生,並且都由事件處理程序觸發。 – kfuglsang 2011-01-27 13:17:42