【发布时间】: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