2011-01-27 6 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이 완료되지 않으면 이벤트가 누락 될 수 있습니다. 화재로 자신의 비동기 이벤트를 발생시키고 메소드를 잊어 버립니다. 확실하지는 않지만 아마 더 효과적 일 것입니다. 또는 폴링 메커니즘을 사용하여 이벤트를 읽는 자체 클래스를 보유하십시오.

+0

합리적인 것 같습니다. 이를 위해 .NET 4의 작업 공장을 활용하려고 노력할 것입니다. – kfuglsang

+0

지금까지이 방법을 사용하여 작동하는 것으로 보입니다. 도와 주셔서 감사합니다 :) – kfuglsang

2

그것은 그것보다 더 나쁜 - 그것은는 5 개 초 간격 내에서의 :

시스템은 마지막 쓰기 이벤트가 이전에 적어도 5 초 발생한 경우에만 WriteEntry 응답합니다. 즉, 둘 이상의 이벤트 로그 변경이 발생하는 경우에도 5 초 간격으로 하나의 EntryWritten 이벤트 알림 만 수신합니다.

(EventLog.EntryWritten에서)

당신이 모든 이벤트를 추적 (그들은 당신이라면), 나는 그들이 '전에 모든 항목을 잡을 수 WriteEntry 래퍼 기능을 추가하는 게 좋을 것해야하는 경우 심지어 로그에 기록됩니다.

+0

+1 마지막 제안입니다. 필요하지 않을 때 이벤트를 사용하지 마십시오. –

+0

나는 그것도 발견했다. 그러나 그것은 사실이 아닌 것처럼 보인다. 그들은 내 사건이 아니다. 두 이벤트가 4 초 내에 발생하고 둘 다 이벤트 핸들러에 의해 트리거 된 예제를 발견했습니다. – kfuglsang

+0

@klugs : 4 초가 그들이 일어난 때나 작성되었을 때의 차이일까요? 어쨌든, EntryWritten 당신이 원하는 것보다 다른 목적으로 정의 된 것 같습니다. 주위에서 작업을 시작하십시오. –

관련 문제