我在C#中的泛型try catch块中捕获了一个ThreadAbortException异常 - 但是,我无法得到它的踪迹,表明它可能在外面被杀死的托管代码。追踪一个无法释放的线程在c中终止#
我得到-2146233040的HRESULT代码,解码时:
FACILITY_URT 19 - .NET CLR
代码0x1530 - COR_E_THREADABORTED
扔进线程使其中止。不可捕捉。
任何想法如何跟踪这个野兽?
我在C#中的泛型try catch块中捕获了一个ThreadAbortException异常 - 但是,我无法得到它的踪迹,表明它可能在外面被杀死的托管代码。追踪一个无法释放的线程在c中终止#
我得到-2146233040的HRESULT代码,解码时:
FACILITY_URT 19 - .NET CLR
代码0x1530 - COR_E_THREADABORTED
扔进线程使其中止。不可捕捉。
任何想法如何跟踪这个野兽?
这是由致电Thread.Abort()
引起的ThreadAbortException
造成的。
请注意,即使通过托管代码抛出,您也无法停止传播ThreadAbortException
。你可以抓住它,但你不能忽视它。
If you look at this link并搜索COR_E_THREADABORTED
您会看到它用于ThreadAbortException
。
有可能是找到一种方法,其中此异常被抛出:
如果你可以在Visual Studio调试器下运行它,进入菜单项Debug | Exceptions
,然后勾选旁边的抛出列中的复选框到“管理调试助手”。 (如果你喜欢,你可以在列中打勾列中的所有项目。)然后在调试器下运行程序,看看是否有任何东西弹出。
要抓住时间....哦。无法赶上全部。 :( – tnw 2013-05-03 20:52:59
然而,阅读文档,OP可能想尝试在他的'finally'中放入一些东西:'ThreadAbortException是一个特殊的异常,可以被捕获,但它会在catch块的末尾再次自动提升。在线程结束之前,运行时会执行所有的finally块,因为线程可以在finally块中执行无限制的计算,或者调用Thread.ResetAbort来取消中止,所以不能保证线程永远不会结束。' – tnw 2013-05-03 20:54:27
@tnw谢谢,更新 – 2013-05-03 20:58:24