【问题标题】:How can I stop a thread in C#?如何在 C# 中停止线程?
【发布时间】:2010-12-27 08:54:07
【问题描述】:

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

如何在 C# 中关闭线程?

谢谢。

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

【问题讨论】:

    标签: c# tcp connection multithreading tcplistener


    【解决方案1】:

    一般来说,您应该通过指示您希望它们停止并让它们执行来“停止”线程。建议您不要使用Thread.Abort,除非您要关闭整个应用程序的紧急情况。 (在当前执行的线程上调用Thread.Abort 更安全,但通常还是很麻烦。顺便说一句,这就是 ASP.NET 在重定向时所做的事情。)

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

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

    【讨论】:

    • +1 这是个好建议——调用 Thread.Abort 有什么缺点?是否会导致线程挂起或内存泄漏?
    • Thread.Abort 在线程上引发 ThreadAbortException,无论当前执行在哪里。如果线程正在运行的代码不会出现异常 - 它可能会导致很多奇怪的行为。
    • 更糟糕的是,处理 ThreadAbortException 会使资源清理变得复杂,并可能导致复杂/混乱的代码或资源泄漏。正如乔恩所说,避免Thread.Abort() 是个好主意。
    • @Roboto:你不知道线程在一个安全的地方可以中止,所以它可以让你的应用程序处于“坏”状态。
    • @Jon:我看了你的例子。看起来不错,但您的示例不会做同样的事情吗?
    【解决方案2】:

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

    Threads in C#

    我贴了一部分:

    停止线程

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

    在 Suite101 了解更多信息:如何创建, C# 中的停止和挂起线程| Suite101.com http://www.suite101.com/article.cfm/c_sharp/96436#ixzz0ZsZRRjKx

    编码愉快!

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        您应该结束要杀死的代码,到达最后一个 } 。对于暂停,您应该使用互斥锁。 opporation 的方式应该是,您命令对象暂停,并在它完成当前请求后,它在下一个请求之前被互斥锁暂停。或者只是为了“杀死”而暂时离开。

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

        【讨论】:

        • 我已经好几个月没有编写 C# 程序了...意思是监视器...但是任何可以停止线程并从外部触发的东西都可以工作...但是是的,监视器更好:-)
        猜你喜欢
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 2010-11-06
        • 1970-01-01
        • 2018-05-02
        相关资源
        最近更新 更多