2011-12-14 4 views
3

アプリケーションでは、EventLog.EntryWrittenイベントに登録し、.NETスレッドプールスレッドを使用して変更イベントが発生するまで待機します。私は、例外がこの.NETスレッドプールのスレッドで発生していると思うので、私は確認するために/キャッチを試みる使用したい、このように:私は右の場所に私のtry/catchを持っている場合.NETスレッドプールのcatchエラーをキャッチしよう

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

私は疑問に思ってこのスレッドで例外を監視するには?

+1

どこに投げられると思われますか?それはイベントのサブスクリプションですか?または 'EventLogMonitor'がスローする可能性がありますか? –

+0

EntryWrittenイベントにメソッドをアタッチしようとして例外が発生するとは思われません。だからキャッチブロックは決して発射されないかもしれない。あなたのコードで発生する可能性のある例外をキャッチする場合は、tryブロックをメソッド/コード領域全体にラップすることができます。たとえばEventLogMonitorメソッドの内部では...これはベスト・プラクティスではありません。 – user1231231412

答えて

6

あなたが書いたコードは、イベント自体ではなく、イベントへの登録時に例外をキャッチします。

EventLogMonitorメソッドにtry..catchブロックを配置する必要があります。

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

} 
+0

パーフェクト、100万のおかげで! – DukeOfMarmalade

+0

例外はスレッド間で伝播しないので、おそらくキャッチされた例外をメインスレッドに渡す方法が必要です。メインスレッドは、それを記録/再スロー/表示することができます。 – Polyfun

関連する問題