2010-01-11 89 views
0

這是我的上下文:如何將全局異常處理添加到加載項DLL?

  • 我正在爲應用程序編寫一個WPF加載項。
  • 此應用程序的主線程是非託管的。
  • 我想爲此加載項添加一個全局異常處理系統來處理任何未處理的異常。

這是我做過嘗試,但不工作:

  • 我可以在try-catch塊不添加到我的Application.Run()代碼行。因爲我是一個加載項,該代碼片段位於應用程序中。
  • System.Windows.Forms.Application.ThreadException不起作用。可能不存在WinForm應用程序。 (WPF託管在非託管代碼中。)
  • AppDomain.CurrentDomain.UnhandledException不起作用。因爲它可能是由應用程序本身處理的。它只是不輸入我的代碼。

因此,對於這種情況的任何想法?

回答

0

即使您可以,您不應該觸及全局異常處理,但是您正在編寫加載項並掛接到全局異常處理中,這不僅會改變加載項的行爲,還會改變主應用程序和其他每個add在系統中 - 做一些可能會導致其他加載項錯誤的東西不是一個好鄰居:-)

現在,你可以做什麼它包裝每個外部可調用的方法在你的加載項-catch塊,這顯然是不可維護的,但像PostSharp這樣的AOP系統可以很容易地爲你添加這些,同時使處理代碼保持在一個很好的中心位置。

+0

謝謝你的回答。你是對的,我不應該爲這個應用程序添加全局異常處理。但是有什麼辦法可以將「全局」異常處理系統添加到我的加載項區域 - 只有我的加載項引發的異常纔會進入該系統。 僅向我的條目添加try-catch塊是不夠的,因爲我在我的加載項的GUI中有一堆行爲。 非常感謝您的意見。 – redjackwong 2010-01-11 07:46:01

+0

您可以使用PostSharp自動爲您的所有代碼添加類似try-catch的行爲 - 甚至包括屬性,轉換器,行爲和用戶/自定義控件中的代碼 - 以便覆蓋大多數情況,對於拋出的異常我沒有很好的解決方案通過GUI內的其他人的代碼 – Nir 2010-01-11 08:48:09

-1
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);