|
用vs自带的serialport控件,事件触发,用默认的每收到一个字节就触发
delegate void mydelegate(byte receiveByte);
byte[] rBuffer = new byte[1024]; //接收缓冲区
int rIndex = 0;
//事件处理函数
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte temp=0;
mydelegate MyDelegate = new mydelegate(UpdateTextBox);
temp = (byte)serialPort.ReadByte(); //读取一个字节
this.Invoke(MyDelegate, temp);
}
//数据处理并显示到textbox函数
public void UpdateTextBox(byte temp)
{
rBuffer[rIndex++] = temp;
...
}
我现在要收的数据为(02/0184018301810197016100083801530000000000/0083/016/8)这样的格式,我上面这样处理合不合理呢?C#还有没有更好的方法?现在收数据时有这样一个异常,搞不明哪里越界了,在this.Invoke(MyDelegate, temp); 出错:
(原文件名:未命1.jpg)
对串口接收事件还有些疑问,望高手解答一下:
1、接收事件可以设置接收缓冲区收到多少个字节才触发一次事件,例如我现在设置收到5个字节才触发一次事件,但我现在如果收到的字节数为8个,前5个触发一次事件时取走了,但后面三个还在缓冲区内,是否要等到下一次有数据来凑够5次才触发?那前面8个数据就不完整了,我在程序设了一下,又可以收到8个,不知控件这个是怎样搞的。
2、我设置每收到一个字节就触发一次事件,是否就像单片机中断一样,收多少个字节就会有多少次事件发生? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|