マルチスレッド アプリ ( 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)
と、プログラムが停止せず、ブレークポイントに到達しません。デバッグを一時停止してスレッド ウィンドウを見ると、スレッドが表示されません。
問題はどこにあると思いますか?スレッドはいつでも実行を停止すると思います。