2013-05-03 62 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