【发布时间】:2013-06-24 23:29:13
【问题描述】:
我正在尝试编写一个程序,每次新数据进入串行端口时都会更新 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 个字节,而不是更多,并将剩余的字节留给下一个实例?
【问题讨论】:
-
显然你有一个 XY 问题。你得到了问题 Y 的答案,但 IMO 你仍然必须解决 X。如果这只是家庭作业,那么可能不需要强大的解决方案(但应该值得 A 或额外的学分)。如果这是一个真正的产品,那么你还没有完成。
标签: c# serial-port