c#: SerialPort类和线程
本文关键字:线程 SerialPort | 更新日期: 2023-09-27 18:18:11
目前,我正在使用SerialPort类与我的设备进行通信。为了改善用户体验,我创建了一个可以终止正在进行的通信的线程。但是,当我在线程中启动以下代码片段时,我将从(SerialPort)port_接收数据。读指令实际上是我在写指令中使用的相同数据(看起来我无法区分读和写缓冲区)。代码工作,如果我不把它放在一个新的线程。那么为什么会发生这种情况呢?我一次只能有一个通信,所以不可能同时在缓冲区中写入两个命令。
commTmr是一个计时器,它将在一定时间后停止while循环。
线程。睡眠是为了确保接收到的数据可以在缓冲区中读取(没有它我就无法读取)
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);
}
文档说明:
不能保证任何实例成员都是线程安全的。
所以我的猜测是,如果你想使用多个线程,你将不得不同步他们使用例如锁,以确保他们不访问端口在同一时间。