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

C# 线程在C中突然停止工作#,c#,.net,multithreading,tcp,C#,.net,Multithreading,Tcp,我有一个多线程应用程序(TCPListener)。有一个线程,它查找请求列表,并在列表中有请求时发送数据。代码如下所示: private void HandleClientRequestsTask() { try { while (true) { if (ClientRequests.Count > 0) { ClientRequest ActiveClientR

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


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

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


我知道这是因为我在客户端看到了一些数据。有没有 捕获异常时停止线程的可能性


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

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


我知道这是因为我在客户端看到了一些数据。有没有 捕获异常时停止线程的可能性


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

是否在异常处理程序中设置了断点?或者在线程开始的位置?可能在启动之前发生了一些事情。如果您的代码从未达到“If(ClientRequests.Count>0)”,则它从未进入此方法。您的问题可能在其他地方。我知道这是因为我在客户端看到了一些数据。如果捕获到异常,是否有可能停止线程?是否在异常处理程序中设置了断点?或者在线程开始的位置?可能在启动之前发生了一些事情。如果您的代码从未达到“If(ClientRequests.Count>0)”,则它从未进入此方法。您的问题可能在其他地方。我知道这是因为我在客户端看到了一些数据。如果捕获到异常,是否有可能停止线程?是的,没错。当我查看日志时,我看到在“TxDataLen=ActiveClientRequest.CommPacket.TCPClient.Client.Send(convertpacketorawdata(ActiveClientRequest.CommPacket.PacketStr));”行中有一个esoption caugth,所以这解释了我的线程停止工作的原因。谢谢。是的,没错。当我查看日志时,我看到在“TxDataLen=ActiveClientRequest.CommPacket.TCPClient.Client.Send(convertpacketorawdata(ActiveClientRequest.CommPacket.PacketStr));”行中有一个esoption caugth,所以这解释了我的线程停止工作的原因。非常感谢。