【问题标题】:Thread stops working suddenly in C#线程在 C# 中突然停止工作
【发布时间】:2012-05-15 06:51:56
【问题描述】:

我有一个多线程应用程序 (TCPListener)。如果请求在列表中可用,则有一个线程查看请求列表并发送数据。代码如下:

private void HandleClientRequestsTask()
{
    try
    {
        while (true)
        {
            if (ClientRequests.Count > 0)
            {
                ClientRequest ActiveClientRequest = ClientRequests.First();

                int DataLen = ActiveClientRequest.CommPacket.PacketStr.Length;
                int TxDataLen = 0;

                try
                {
                    TxDataLen = ActiveClientRequest.CommPacket.TCPClient.Client.Send(ConvertPacketToRawData(ActiveClientRequest.CommPacket.PacketStr));
                }
                catch (Exception ex)
                {
                    AddLog(LogIndex.TCPClientNotExist, ex.ToString());
                }

                if (DataLen != TxDataLen)
                    AddLog(LogIndex.TCPClientDataSendErr, ActiveClientRequest.CommPacket.TCPClient.Client.RemoteEndPoint.ToString(), ActiveClientRequest.CommPacket.CmdType, ActiveClientRequest.CommPacket.RXDevID.ToString());

                ClientRequests.Remove(ActiveClientRequest);
            }

            Thread.Sleep(HANDLE_CLIENT_REQ_TASK_SLEEP_VALUE);
        }
    }
    catch (Exception ex)
    {
        AddLog(LogIndex.UnhException, ex.ToString());
    }
}

上面的线程突然停止了,我想。当我在if (ClientRequests.Count > 0) 行上放置一个调试点时,程序不会停止,断点也不会被命中。当我暂停调试并查看线程窗口时,没有看到线程。

您认为问题出在哪里?我想,线程随时都会停止运行。

【问题讨论】:

  • 您是否在异常处理程序中放置了断点?或者在您的线程开始的位置?也许在它开始之前发生了一些事情。
  • 如果你的代码永远不会到达“if (ClientRequests.Count > 0)”,那么它永远不会进入这个方法。您的问题可能在其他地方。
  • 我知道它开始了,因为我在客户端看到了一些数据。如果捕获到异常,是否有可能停止线程?

标签: c# .net multithreading tcp


【解决方案1】:

如果您确实需要两个 try-catch 块,请将外部 try-catch 移到 while 循环内。

我知道它开始了,因为我在客户端看到了一些数据。有没有 如果捕获到异常,是否可以停止线程?

是的,如果它跳转到外部catch块线程将不再执行while循环。

【讨论】:

  • 是的,没错。当我查看日志时,我看到“TxDataLen = ActiveClientRequest.CommPacket.TCPClient.Client.Send(ConvertPacketToRawData(ActiveClientRequest.CommPacket.PacketStr));”行有一个 esception cugth所以这解释了为什么我的线程停止工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2021-02-01
  • 2016-12-29
  • 2018-05-09
  • 2015-12-07
  • 2015-08-23
相关资源
最近更新 更多