我正在尝试编写一个程序,每次新数据进入串行端口时都会更新 Windows 窗体,但是我在努力理解串行端口的工作原理以及如何以我想要的方式使用它。
我有一个外部设备以 1Hz 的频率向我的串行端口发送 8 个字节,并希望使用来自 SerialPort 类的 DataReceived 事件。当我调试我的代码时,事件或多或少会根据程序在特定时间执行的操作随机触发。代码如下:
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//byte[] rxbyte = new byte[1];
byte[] rxbyte = new byte[8];
byte currentbyte;
port.Read(rxbyte, 0, port.BytesToRead);
currentbyte = rxbyte[0];
int channel = (currentbyte >> 6) & 3; //3 = binary 11, ANDS the last 2 bits
int msb_2bit = (currentbyte >> 0) & 255; //AND compare all bits in a byte
currentbyte = rxbyte[1];
int val = ((msb_2bit << 8) | (currentbyte << 0));
//Extra stuff
SetText_tmp1(val.ToString());
}
在调用 Read 函数之前,我希望能够在接收缓冲区中恰好有 8 个字节,但我不确定如何做到这一点(以前从未使用过 SerialPort 类),并且只想在我有的时候才对数据进行所有操作整个 8 个字节。仅当缓冲区中有一定数量的字节时,是否有内置方法来切换事件?或者是否有另一种方法只获取 8 个字节,而不是更多,并将剩余的字节留给下一个实例?