2011-12-14 5 views
3

응용 프로그램에서 EventLog.EntryWritten 이벤트에 등록하고 .NET Threadpool 스레드를 사용하여 변경 이벤트가 발생할 때까지 대기합니다. 나는 예외이 .NET 스레드 풀 스레드에서 발생하는 생각, 그래서 캐치과 같이 확인/시도 사용할 : 난 그냥 궁금.NET 스레드 풀에서 catch catch try 시도

try { 
eventLog.EntryWritten += new EntryWrittenEventHandler(EventLogMonitor); 
} 
catch (System.Componentmodel.Win32exception e) 
{ 
// log error 
} 

을 내가 올바른 장소에 내 시도/캐치가있는 경우 예외에 대해이 스레드를 모니터 하시겠습니까?

+1

예상되는 부분은 어디입니까? 이벤트 구독 중이십니까? 또는'EventLogMonitor'가 던질 가능성이 있습니까? –

+0

EntryWritten 이벤트에 메서드를 연결하려고하면 예외가 발생한다고 생각하지 않습니다. 따라서 catch 블록은 절대 실행되지 않을 수 있습니다. 코드에서 발생할 수있는 예외를 catch하려면 전체 메서드/코드 영역에 try 블록을 래핑 할 수 있습니다. 예를 들어 EventLogMonitor 메소드 내부에서 ... 이것은 모두 최상의 btw가 아닙니다. – user1231231412

답변

6

작성한 코드는 이벤트 자체가 아니라 이벤트 등록에 대한 예외를 catch합니다.

EventLogMonitor 메서드에 try..catch 블록을 넣어야합니다.

private void EventLogMonitor (Object sender,EntryWrittenEventArgs e) 
{ 
    try 
    { 
     // your logic goes here 
    } 
    catch (Exception ex) 
    { 
      //do something with the excpetion 
    } 

} 
+0

완벽한, 감사합니다 백만! – DukeOfMarmalade

+0

예외가 스레드간에 전파되지 않으므로 catch 된 예외를 주 스레드로 전달하는 방법이 필요할 수도 있습니다. 메인 쓰레드는 로그를 남기거나 다시 던지거나 디스플레이 할 수 있습니다. – Polyfun