如何在C#中停止线程?

时间:2009-12-16 18:47:20

标签: c# tcp connection multithreading tcplistener

我已经创建了一个客户端 - 服务器应用程序,并且在服务器上我希望有机会停止服务器然后再次启动它。问题是我无法阻止侦听Tcp连接的线程。

如何在C#中关闭线程?

感谢。

private void KeepServer(){
    while (this.connected)
    {
         tcpClient = tls.AcceptTcpClient();
         Connection newConnection = new Connection(tcpClient);
    }
}

4 个答案:

答案 0 :(得分:8)

通常,您应该通过指示您希望它们停止并让它们执行来“停止”线程。除了您关闭整个应用程序的紧急情况外,建议您使用Thread.Abort。 (在当前正在执行的线程上调用Thread.Abort更安全,但通常仍然很蹩脚。顺便说一句,这就是ASP.NET重定向时的作用。)

我有page about stopping threads gracefully。当然,您不必使用那些确切的代码 - 但是设置标志并定期测试它的模式是重点。

现在,在特定情况下如何应用它将取决于您如何监听TCP连接。如果您可以发布该线程使用的代码,我们可以适当地调整它。

答案 1 :(得分:2)

Yor问题有点笼统,但我认为这可能会对您有所帮助:

Threads in C#

我粘贴了一部分:

  

停止线程

     

通常,当线程启动时,它   一直运行直到完成但是,确实如此   可以通过调用来停止线程   Abort()方法。在我们的例子中,如果   我们想停止firstThread,你会的   添加以下代码。

     

在Suite101阅读更多内容:如何创建,   在C#中停止和挂起线程   Suite101.com   http://www.suite101.com/article.cfm/c_sharp/96436#ixzz0ZsZRRjKx

快乐的编码!

答案 2 :(得分:0)

您应该使用布尔值或条件来停止线程。您可以使用Property来更改此布尔值的“Flag”,并且Thread的循环将结束。这是一种正确的方法。当然,您可以在线程上使用Abort(),但不推荐这样做,并且会引发您需要处理的异常。

答案 3 :(得分:0)

可能来自外部的Thread.Abort并且有一种方法可以暂停。但这是一个不正确的方法...

你应该结束代码杀死,到达最后}。暂停你应该使用互斥锁。 opporation的方式应该是,你命令对象暂停,在它完成当前请求后,它会在下一个互斥之前被互斥锁停止。或者只是为了“杀戮”而走出一边。

顺便说一下,MSDN有一篇很好的文章描述了常见的线程场景