2011-01-28 30 views
2

我正在使用反射來實例化來自其他程序集的對象。這些程序集中的對象可能會在整個過程中啓動其他線程。此程序集的作者可能無法正確處理這些工作線程上的異常。 問題是,當它們返回未處理時,整個應用程序停止執行並觸發AppDomain.CurrentDomain.UnhandledException如果工作線程返回未處理狀態,則繼續主線程

我試過只是包裝我的方法調用的try...catch但似乎並沒有捕獲異常(有意義的,因爲在未來催生工作者線程是實際的失敗線程)

有沒有一種方法來處理這種情況沒有簡單地強制開發人員正確處理所有異常?

這個想法與Windows服務的工作方式類似。僅僅因爲一個應用程序失敗,並不意味着Windows服務主機也會崩潰。

我在這裏失蹤了什麼?

回答

1

你真的應該強制在線程中正確地處理異常,如果沒有,就乾淨地關閉你的應用程序。

爲了防止AppDomain關閉,您需要將這些「組件」加載到它們自己的專用AppDomain中。這將導致他們拆除他們的AppDomain,但不是整個應用程序。

這會產生其他後果(特別是將數據傳入和傳出對象時),並且可能會使應用程序的設計顯着複雜化,所以這不是我輕易承擔的。