我正在编写一个与测试设备对话的界面。该设备通过串行端口进行通信,并以已知数量的字节响应我发送的每个命令。
我目前的结构是:
- 发送命令
- 回读指定字节数
- 继续申请
但是,当我使用 SerialPort.Read(byte[], int32, int32) 时,该函数没有阻塞。因此,例如,如果我调用MySerialPort.Read(byteBuffer, 0, bytesExpected);
,该函数将返回少于指定数量的bytesExpected
。这是我的代码:
public bool ReadData(byte[] responseBytes, int bytesExpected, int timeOut)
{
MySerialPort.ReadTimeout = timeOut;
int bytesRead = MySerialPort.Read(responseBytes, 0, bytesExpected);
return bytesRead == bytesExpected;
}
我这样称呼这个方法:
byte[] responseBytes = new byte[13];
if (Connection.ReadData(responseBytes, 13, 5000))
ProduceError();
我的问题是我似乎永远无法让它像我所说的那样读取完整的 13 个字节。如果我在我的一切工作正常之前提出Thread.Sleep(1000)
权利。SerialPort.Read(...)
如何强制该Read
方法阻塞,直到超过 timeOut 或读取指定的字节数?