我有一个函数,我调用thread.abort杀死一个线程。我知道这不是最佳实践,但是我正在dll中调用一个函数,该dll在该函数中基本上具有无限循环,因此终止线程的唯一方法是调用线程中止。我可以调用thread.join,但是我的GUI会卡住。我已经在窗体应用程序和该线程中都进行了捕获,但是当我调用thread.abort函数时,抛出了一个异常,该异常被我的try块捕获到了其中一个位置,但是我的应用程序仍然崩溃。
什么是处理threadAbort的正确方法,以便它不会使我的应用程序崩溃。
最佳答案
您的应用程序崩溃是因为在处理它的任何catch块的末尾自动重新抛出了ThreadAbortException
。为了防止它被重新抛出,您需要调用Thread.ResetAbort()
。
try {
...
} catch (ThreadAbortException) {
Thread.ResetAbort();
}
注意:建议您找到另一种摆脱这种方法的方法。中止线程是非常危险的,应仅是最后的手段。将取消 token 传递给线程或使用共享标志退出无限循环会更加安全。
关于c# - 如何捕捉ThreadAbort?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7251247/