2012-01-16 47 views
2

我正在開發一個具有插件支持的應用程序。插件可能由第三方開發。任何方式來捕捉任何衍生線程的異常?

目前我有一個try/catch處理程序圍繞任何調用插件嘗試和保護我的應用程序免受第三方代碼。 catch記錄了這個問題,但沒有使我的應用程序崩潰。

我的問題是當第三方代碼產生線程做一些工作。這些不是我的處理程序。

有沒有辦法從「此函數產生的任何東西」中捕獲異常?或者我需要在全局處理程序中捕獲它們?

+3

什麼類型的應用程序?的WinForms? ASP.NET?服務? WPF? – 2012-01-16 12:32:42

+0

WPF,但我不認爲這是相關的。插件對GUI框架一無所知。 – GazTheDestroyer 2012-01-16 13:08:33

+1

捕獲未處理的異常的方法可能有所不同。 – 2012-01-16 13:57:51

回答

3

當一個插件失敗並且在同一個AppDomain中運行時,最好讓應用程序自行失敗;因此,停止應用程序。當插件崩潰時,您不會知道應用程序處於何種狀態。

另一種選擇是在其自己的(子)AppDomain中運行插件。這樣,您可以卸載該應用程序域,並在新創建的AppDomain中重新啓動該插件,而無需重新啓動該應用程序。

您可能想看看託管擴展性框架(MEF)。這是專門爲這些場景設計的。

2

關於您的第二個願望 - 在全局處理程序中捕獲異常,您可以在應用程序域中使用substring事件UnhandledException。它會捕獲所有未在代碼中捕獲的異常。

它主要用於記錄異常信息。但是,它不會保存您的應用程序終止。