我有一个多线程应用(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)
行上放置调试点时,程序不会停止并且断点永远不会被击中。当我暂停调试并查看线程窗口时,线程没有看到。
您认为问题在哪里?我想,线程随时都会停止运行。
答案 0 :(得分:3)
如果你真的需要两个try-catch块,可以在while循环中移动外部try-catch。
我知道它开始是因为我在客户端看到了一些数据。有没有 如果发现异常,可以停止线程吗?
是的,如果它跳转到外部catch块线程将不再执行while循环。