現在、SerialPort クラスを使用してデバイスと通信しています。ユーザー エクスペリエンスを向上させるために、進行中の通信を終了できるスレッドを作成します。ただし、スレッドで次のコードを開始すると、(SerialPort)port_.Read 命令から受け取るデータは、実際には、Write 命令で使用したデータと同じです (私には区別できないように見えます)。新しいスレッドに入れなければ、コードは機能します。では、なぜこのようなことが起こっているのでしょうか。一度に通信できるのは 1 つだけなので、同時に 2 つのコマンドをバッファーに書き込むことはできません。
commTmr は、一定時間後に while ループを停止するタイマーです。
Thread.Sleep は、受信したデータがバッファで読み取れることを確認することです(それなしで読み取るのに問題がありました)
while ((commTmr.timedout == false) && (port_.BytesToRead < threshold))
{
if (commTmr.TimeElapsed().TotalSeconds > trigg)
{
port_.Write(sentData_, 0, nbBytesSend);
trigg+=0.3;
}
}
if (commTmr.timedout == true)
{
return false;
}
else if (!(port_.BytesToRead < threshold))
{
Thread.Sleep(100);
port_.Read(receivedData_, 0, nbBytesRead);
}