我試圖收集.NET進程或線程終止原因的完整列表,即使main()方法由try ... catch子句守護。什麼會導致.NET進程/線程意外終止?
一個這樣的原因是Thread.Abort()(除非你調用Thread.ResetAbort)。你知道更多的原因嗎?
我試圖收集.NET進程或線程終止原因的完整列表,即使main()方法由try ... catch子句守護。什麼會導致.NET進程/線程意外終止?
一個這樣的原因是Thread.Abort()(除非你調用Thread.ResetAbort)。你知道更多的原因嗎?
也許在你的線程中發生了一個未處理的異常,以殺死線程結束;在主線程中有一個try catch子句不會捕獲另一個正在運行的線程的異常。
編輯: 在讀/寫共用字段
網絡連接超時的一些併發訪問。
停電。
用戶正在查詢有問題的進程。
StackOverflowException不能由您的代碼處理。
當您有一個無限循環時,通常會出現StackOverflowException異常,這會導致您的調用堆棧增長到超過通常的堆棧大小(1MB)。
還有更多的例外,你不能從中恢復。 ExecutionEngineException似乎是其中之一。
與C/C++不同,main()並不完全是您的應用程序。因此,即使用try/catch塊包圍main()中的所有代碼也不會捕獲該代碼生成的所有異常。
但是,您可以通過監聽Application.ThreadException事件附加一個函數來處理整個應用程序拋出的未處理的異常,這將幫助您捕獲應用程序中任何線程的異常,無論它是由您的代碼創建的還是不。
例如,您的代碼可能會調用外部非託管DLL中的代碼。該代碼可能會執行自己的線程,這可能會異步失敗,從而導致引發異常。該例外屬於您的應用程序的過程,但不屬於您的任何代碼。如果未被捕獲,將導致您的程序意外終止。
卸載應用程序域
我最近不得不解決一個國有企業造成其消耗的IIS的256K堆棧限制〜248K第三方的DLL,就像當它不是無限循環 – annakata 2009-01-13 09:21:25