【发布时间】:2013-02-08 20:23:27
【问题描述】:
我的代码中有一个线程嵌套在另一个线程中。在我的结束事件中,我使用upperThread.Abort() 来关闭上面的线程。但是,我的代码被挂断了。我相信这是因为我的lowerThread() 仍在运行。如何关闭较低(嵌套)线程以正确关闭应用程序?
【问题讨论】:
-
Thread.Abort()是不安全,你不应该在新代码中使用它。 -
您的问题很难回答,因为您似乎对线程的工作方式有一些错误的看法。线程不会“嵌套”。工作线程和 UI 线程之间存在差异,但这种差异通常不表示为“嵌套”关系。更一般地说,cdhowie 是绝对正确的。如果您正在编写 thread.Abort,则几乎可以肯定您做错了什么。如果你需要关闭一个线程,那么想出一个信号机制,一个线程可以礼貌地关闭另一个线程。
-
Thread.Abort让婴儿吉布斯哭泣。请使用Task。 -
@EricLippert 感谢您的提醒。这应该为我指明正确的方向。
-
当然一个线程启动另一个线程;还有什么会在用户代码中启动线程?但这并不能使“旧”线程以某种方式成为新线程的“所有者”。线程由它们的进程拥有,而不是由另一个线程拥有。您通过提出一种机制关闭两个线程,使进程中的所有线程礼貌地同意何时关闭;如果您正在编写具有多个线程的程序,那么您必须知道如何去做。
标签: c# multithreading nested abort