1

如果您使用 Thread.Abort 从另一个托管线程中止一个托管线程,CLR 如何实际在另一个线程上引发异常?似乎是一个巧妙的技巧!

4

2 回答 2

1

我发现了一些关于这个主题的有趣链接。ThreadAbortException 是一种特殊情况,由 CLR 专门处理。

http://mnikoo.net/2007/02/07/the-magic-of-the-clr-threadabortexception/

http://blogs.msdn.com/b/clrteam/archive/2009/04/28/threadabortexception.aspx

于 2011-06-03T09:43:54.330 回答
1

不久前我写了一篇关于这个的博客文章。第一部分是关于何时可以中止线程,第二部分是关于它的实际工作方式。

我从未见过任何关于它实际工作方式的正确(在这种情况下是完整的)文档,所以我写了一篇关于它的文章。

要点是 CLR 将使用 SetThreadContext(一个 win32 api)劫持您当前的 IP 并将您移动到一个特殊的存根中以设置线程中止,如果您的线程不在可中止等待中。

在这里查看帖子

于 2011-06-15T01:02:15.320 回答