5
A
回答
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
}
}
是一個非常糟糕的主意,因爲它可以掩蓋您確實希望傳播到主程序的異常。
相關問題
- 1. 當setDefaultUncaughtExceptionHandler捕獲未處理的異常時,線程凍結(reportDropResult)
- 2. 線程時出現未處理的.Net框架異常
- 3. Python的線程未處理的異常
- 4. 問題與處理程序。線程退出與未捕獲的異常。
- 5. 捕獲未處理的線程異常
- 6. threadid = 1:線程退出時出現未捕獲的異常
- 7. perl線程異常退出
- 8. 當線程意外退出時拋出什麼異常?
- 9. 當python腳本具有未處理的異常時退出代碼
- 10. 異常處理 - 正常退出
- 11. Android:線程退出時未捕獲的異常
- 12. threadid = 1:線程退出時未捕獲的異常(group = 0x4001d5a0)
- 13. 線程退出時未捕獲的異常,沒有錯誤
- 14. threadid = 1:線程退出時未捕獲的異常(組= 0x40c1da68)
- 15. 當Perl線程退出時,串口處理程序錯誤
- 16. 拋出未處理的異常後卡住了線程
- 17. 如何在ASP.NET中處理未處理的線程異常?
- 18. 在主線程的線程中引發未處理的異常?
- 19. 多線程異常處理
- 20. Boost線程異常處理
- 21. 線程和異常處理
- 22. 線程異常處理
- 23. 在全局異常處理程序中處理線程異常?
- 24. 處理異常時拋出的額外的未捕獲異常
- 25. 退出任何未處理的異常的情況下,應用
- 26. 蟒蛇退出處理異常
- 27. 當io_service線程化時,Boost.Asio中的異常處理
- 28. 異步任務致命異常 - 線程正在退出,未捕獲的異常
- 29. 當應用程序正在完成時未處理的異常
- 30. Winforms毫不客氣地退出「未處理的異常」