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

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

如何在C#中关闭线程?

谢谢。

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

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

我有一个关于优雅地停止线程的页面 。 当然,您不必使用那个确切的代码 – 但是设置标志并定期测试它的模式是重点。

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

问题有点笼统,但是,我认为这可以帮到你:

C#中的线程

我粘贴一部分:

停止线程

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

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

快乐的编码!

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

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

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

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