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

时间:2013-01-03 00:53:58

标签: c# multithreading

我想尝试使用C#进行线程化,我知道有关C中线程的一些事情。

所以我只是想问一下我是否要终止一个帖子,我应该用smt.Abort()来做 或者它会在功能结束后“自杀”?

此外,C#中的C中是否有类似pthread_exit()的内容?

4 个答案:

答案 0 :(得分:55)

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

场景:您想要关闭计算机

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

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

场景:您想要关闭计算机

解决方案:单击“开始”,“关闭”,然后等待计算机电源关闭。

答案 1 :(得分:3)

在外部(从线程外部)终止线程是个坏主意;当你异步杀死它时,你永远不知道线程在做什么。在C#中,如果你的线程函数返回,则线程结束。

此MSDN文章How to: Create and Terminate Threads (C# Programming Guide)包含一些您可能会发现有用的注释和示例代码。

答案 2 :(得分:3)

一旦函数结束,您不需要手动终止线程。

如果你生成一个线程来运行一个方法,一旦该方法返回,线程将自动关闭,因为它没有任何进一步的执行。*

当然,您可以通过简单地调用Abort()来手动中止线程,但由于不可靠地确定线程处于当前执行状态的位置而导致潜在的线程状态损坏,这几乎是不推荐的。如果您需要自己处理线程的查杀,最好使用CancellationToken。您还可以阅读MSDN上的Cancellation of Managed Threads文章。

**也就是说,除非你使用ThreadPool来执行你的工作。您不应该担心在不同的排队任务中重复使用这些线程时会中止这些线程。

答案 3 :(得分:0)

Thread.Abort()
Thread.Join();
Thread = null;