目前,我正在使用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);
}
答案 0 :(得分:1)