2013-05-03 58 views
1

我在C#中的泛型try catch塊中捕獲了一個ThreadAbortException異常 - 但是,我無法得到它的蹤跡,表明它可能在外面被殺死的託管代碼。追蹤一個無法釋放的線程在c中終止#

我得到-2146233040的HRESULT代碼,解碼時:

FACILITY_URT 19 - .NET CLR

代碼0x1530 - COR_E_THREADABORTED

扔進線程使其中止。不可捕捉。

任何想法如何跟蹤這個野獸?

回答

1

這是由致電Thread.Abort()引起的ThreadAbortException造成的。

請注意,即使通過託管代碼拋出,您也無法停止傳播ThreadAbortException。你可以抓住它,但你不能忽視它。

If you look at this link並搜索COR_E_THREADABORTED您會看到它用於ThreadAbortException

有可能是找到一種方法,其中此異常被拋出:

如果你可以在Visual Studio調試器下運行它,進入菜單項Debug | Exceptions,然後勾選旁邊的拋出列中的複選框到「管理調試助手」。 (如果你喜歡,你可以在列中打勾列中的所有項目。)然後在調試器下運行程序,看看是否有任何東西彈出。

+1

要抓住時間....哦。無法趕上全部。 :( – tnw 2013-05-03 20:52:59

+1

然而,閱讀文檔,OP可能想嘗試在他的'finally'中放入一些東西:'ThreadAbortException是一個特殊的異常,可以被捕獲,但它會在catch塊的末尾再次自動提升。在線程結束之前,運行時會執行所有的finally塊,因爲線程可以在finally塊中執行無限制的計算,或者調用Thread.ResetAbort來取消中止,所以不能保證線程永遠不會結束。' – tnw 2013-05-03 20:54:27

+0

@tnw謝謝,更新 – 2013-05-03 20:58:24