目前,我正在使用 SerialPort 类与我的设备进行通信。为了改善用户体验,我创建了一个可以终止正在进行的通信的线程。但是,当我在线程中启动以下代码时,我将从 (SerialPort)port_.Read 指令接收到的数据实际上与我在 Write 指令中使用的数据相同(看起来我无法区分读写缓冲区)。如果我不把它放在一个新线程中,代码就可以工作。那么为什么会发生这种情况,我一次只能进行一次通信,因此无法同时将 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);
}