2011-01-30 97 views

回答

0

這是正常行爲。也許你想捕捉異常來阻止應用程序退出。

1

是的,這是正常的,你可以看到這個類似的question瞭解更多細節。

1

這是來自v2.0的CLR的正常行爲。這裏是一個MSDN的帖子。爲避免終止進程,您可以使用類似這樣的東西

<legacyUnhandledExceptionPolicy enabled="1"/> 

這是不可取的。

4

您的預期行爲曾經是1.1中的行爲。通常認爲這是一個壞主意。當任何線程中有未處理的異常時,您的進程可能會處於不一致的狀態。對共享數據的更新可能會部分應用,等等。運行時沒有安全地處理這種情況的信息,甚至不知道如何處理這種情況,所以它的選擇將等於終止線程並讓程序進入一個奇怪的狀態。這可能導致資源泄漏,數據中斷,數據損壞等。通過終止給定未處理異常的流程,您確切知道發生了什麼,流程結束。

7

.NET應用程序的默認行爲是每當發生未處理的異常時退出。當一個異常處理未得到處理時,程序處於一個未知的,可能不穩定的狀態。僅僅因爲它發生在後臺線程中並不意味着錯誤不會影響程序的其餘部分。在這種情況下,運行時最謹慎的方法是轉儲程序。

您可能會考慮AppDomain.CurrentDomain.UnhandledException,這將允許您捕獲未處理的異常並作出相應的反應。更好的解決方案是用try...catch包裝你的線程處理器。但只有它能夠處理那些它知道如何處理的例外。這樣做:

void MyThreadProc() 
{ 
    try 
    { 
     // ... 
    } 
    catch 
    { 
     // handle all exceptions 
     // This is a BAD idea 
    } 
} 

是一個非常糟糕的主意,因爲它可以掩蓋您確實希望傳播到主程序的異常。

相關問題