我已经创建了一个客户端 - 服务器应用程序,并且在服务器上我希望有机会停止服务器然后再次启动它。问题是我无法阻止侦听Tcp连接的线程。
如何在C#中关闭线程?
感谢。
private void KeepServer(){
while (this.connected)
{
tcpClient = tls.AcceptTcpClient();
Connection newConnection = new Connection(tcpClient);
}
}
答案 0 :(得分:8)
通常,您应该通过指示您希望它们停止并让它们执行来“停止”线程。除了您关闭整个应用程序的紧急情况外,建议您不使用Thread.Abort
。 (在当前正在执行的线程上调用Thread.Abort
更安全,但通常仍然很蹩脚。顺便说一句,这就是ASP.NET重定向时的作用。)
我有page about stopping threads gracefully。当然,您不必使用那些确切的代码 - 但是设置标志并定期测试它的模式是重点。
现在,在特定情况下如何应用它将取决于您如何监听TCP连接。如果您可以发布该线程使用的代码,我们可以适当地调整它。
答案 1 :(得分:2)
Yor问题有点笼统,但我认为这可能会对您有所帮助:
我粘贴了一部分:
停止线程
通常,当线程启动时,它 一直运行直到完成但是,确实如此 可以通过调用来停止线程 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有一篇很好的文章描述了常见的线程场景