杀死线程,真的

本文关键字:真的 线程 | 更新日期: 2023-09-27 18:03:30

我需要终止一个冻结的线程,我将IsBackground设置为true,但它仍然存活。线程的属性:

ThreadState = abortrerequested

IsBackground = true

当我检查冻结点时,我发现下面的行:

resultDetect = Detect(input, ref output);

现场是第三方代码(方法检测)。如您所见,线程只更新resultDetect。我需要中止那个线程,重新启动一个新的线程来继续。否则,应用程序等待,什么也不做-fresh resultDetect required -

我如何杀死没有死的线程?

杀死线程,真的

只有一种方法可以安全地终止应用程序中挂起的线程:Environment。如果线程正在运行内核代码,即使这样也可能失败。

最好不要使用挂起的第三方代码。如果您别无选择,那么在一个单独的进程中运行它。

如果Detect转换为非托管代码,则CLR将延迟ThreadAbortException的注入,直到它返回。这种行为在。net 2.0中改变了,使线程中止更加安全。CLR真的在努力保护你不破坏进程的状态,这在非托管代码的情况下很可能发生,因为你没有得到应用程序域隔离的好处,而在全托管场景下,应用程序域可以很容易地卸载。实际上,唯一的解决方案是在一个单独的进程中运行这个API,并使用WCF、remoting等与之通信。

也许试着打电话给Thread.Abort()。尽管不建议这样做(参见终止。net线程)