2013-06-05 53 views
0

我試圖讓一個未處理的異常處理程序工作,但它似乎沒有做任何事情。我必須在構造函數如下:AppDomain.CurrentDomain.UnhandledException不工作

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); 

這furthur下來

static void MyHandler(object sender, UnhandledExceptionEventArgs args) 
    { 
     Exception e = (Exception)args.ExceptionObject; 
     if (log != null) 
     { 
      if (args.IsTerminating) 
       log.LogError(e.Message, e.Source, e.InnerException.Message); 
      else 
       log.LogWarning(e.Message, e.Source, e.InnerException.Message); 
     } 
     else 
     { 
      System.Reflection.Assembly exe = System.Reflection.Assembly.GetEntryAssembly(); 
      string exeDir = System.IO.Path.GetDirectoryName(exe.Location); 
      File.WriteAllText(DocuPath.Join(exeDir, "Emergency.log"), e.ToString()); 
     } 
    } 

日誌是處理記錄到文件中的靜態對象。爲什麼我不在對象寫入的日誌文件或Emergency.log中收到消息?

+2

把一個斷點,並查看其是否擊中。 – zimdanen

+1

你能向我們展示拋出異常的代碼,你期望在這裏處理嗎? –

回答

2

如果e.InnerException爲空,則會在此方法內發生異常。
我不認爲這裏有這個問題是個好主意。

試試這個。

string innerMessage = e.InnerException != null ? e.InnerException.Message : string.Empty; 
if (args.IsTerminating) 
    log.LogError(e.Message, e.Source, innerMessage); 
else 
    log.LogWarning(e.Message, e.Source, innerMessage); 
+0

......呃......有時候這是被忽視的簡單答案 – waterfoul