如何在C#中终止一个线程?

Bil*_*das 15 c# multithreading

我想试试用C#进行线程化,我知道一些关于C语言的线程.

所以我只是想问一下我是否要终止一个线程,我应该这样做,smt.Abort() 否则它会在函数结束后"自杀"?

另外,pthread_exit()在C#中有类似C的东西 吗?

Jer*_*all 63

Thread.Abort 将"杀死"该线程,但这大致相当于:

场景:您想要关闭计算机

解决方案:您将炸药绑在计算机上,点亮它并运行.

最好是触发"退出条件",通过CancellationTokenSource.Cancel设置一些(安全访问)"正在运行"bool等,并调用Thread.Join.这更像是:

场景:您想要关闭计算机

解决方案:单击"开始","关闭",然后等待计算机关闭.

  • 如何将`CancellationTokenSource`传递给`System.Threading.Thread`对象? (7认同)
  • 那个炸药比喻:P.+1 (7认同)
  • 也许一些代码有助于改进这个答案? (4认同)

Rud*_*ser 6

函数结束后,您无需手动终止线程。

如果您生成了一个线程来运行某个方法,则该方法返回后,该线程将自动关闭,因为它不再执行任何操作。*

当然,您可以通过简单地调用来手动中止线程Abort(),但是由于不可靠地确定线程处于其当前执行状态的位置而可能导致线程状态损坏,因此不建议这样做。如果您需要自己处理线程的终止,则最好使用CancellationToken。您也可以阅读MSDN 上有关“ 取消托管线程”的文章。

**也就是说,除非您使用的是ThreadPool来执行工作。您不必担心中止这些线程,因为它们可以在不同的排队任务中重复使用。