2011-10-22 49 views
7

可能是以下副本:Can I prevent an uncaught exception in another AppDomain from shutting down the application?當我加載的另一個AppDomain拋出一個未處理的異常時,我可以將我當前的AppDomain從拆除狀態中分離出來嗎?

一直試圖找出這個問題的答案。

只是想確保答案確實不是,在我扔掉所有代碼之前,我已經將他們的驅動程序隔離在其單獨的應用程序域中,並將其替換爲舊式過程。

所以正式的問題是這樣的。

有一個默認域「ad-default」,我在其中創建了一個新的「ad-hosted」應用程序域,可以避免「廣告託管」中的未處理的例外「ad-default」?

我知道我可以通過連接到「ad-hosted」域的UnhandledException事件來觀察異常,但我無法阻止它們傳播到「ad-default」域。

這是真的嗎?但是,爲什麼我們甚至想要AppDomain的,如果他們不提供隔離?

編輯: 答案不幸的是沒有,看到這個答案的解釋: AppDomain, handling the exceptions

+1

不重複。 –

回答

3

隔離在從拆除默認域另一個應用程序域線程的例外,唯一的方法是使用:

<runtime> 
    <legacyUnhandledExceptionPolicy enabled="1"/> 
<runtime> 

這會將unhandledexception的IsTerminating標誌設置爲false,並阻止默認域關閉。

我們在我們的例子中做的是在兩個域中連接到UnhandledExceptionHandler。 然後,我們在「廣告託管」中觸發一個semafore,該廣告將通過爲此目的在「廣告默認」中創建的線索提取,然後轉而處理「廣告託管」

這是一個黑客,並可能無法存活到框架的未來幾代,但它使「廣告默認」更強大,因爲它不會被拆除在「廣告託管」的未處理的例外,我們還鉤在「ad-default」中添加事件處理程序,將發件人轉換爲appdomain,並檢查是否發生了「ad-default」異常,如果是,我們也會拆除「ad-default」,模擬.net 2.0的行爲,甚至使用上面描述的運行時設置。

希望這給了人們一個關於如何製作更多靜音插件主機的線索。

相關問題