繁体   English   中英

线程在C#中突然停止工作

[英]Thread stops working suddenly in C#

我有一个多线程应用程序( 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)行上放置调试点时,程序不会停止并且断点永远不会命中。 当我暂停调试并查看线程窗口时,看不到线程。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM