serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
那么事件一旦被触发,DataReceivedHandler方法被执行,我想问问大家在这个方法里是怎么处理数据的。
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(200);
byte[] buffer=new byte[serialport.BytesToRead];
serialport.Read(buffer, 0, serialport.BytesToRead);
//接下来怎么处理buffer?我想把buffer显示在winform窗口的文本框里面,不知道大家有什么妙招
}
5 个解决方案
#1
定义一个委托,一个方法,用Invoke调用方法,传递参数,我电脑里有代码,手机回复,不方便敲
#2
数据都有了,对窗体上的控件属性直接复制呗
#3
不要Sleep。
收到数据后先判断一下数据的完整性,如果不完整,那就把数据留着,等下次的来的合在一起再判断,如果完整那就显示。和TCP里处理粘包的方法差不多。
输出时,如果显示的速度根不上数据接收的速度,那就定时刷新;如果跟得上,那就收到数据后用Invoke或BeginInvokl显示。
收到数据后先判断一下数据的完整性,如果不完整,那就把数据留着,等下次的来的合在一起再判断,如果完整那就显示。和TCP里处理粘包的方法差不多。
输出时,如果显示的速度根不上数据接收的速度,那就定时刷新;如果跟得上,那就收到数据后用Invoke或BeginInvokl显示。
#4
由于接受数据 速度较快,一般将数据存放到 队列中进行处理。
#5
c#写的串口调试助手,代码有很多。下一份,自学一下。
#1
定义一个委托,一个方法,用Invoke调用方法,传递参数,我电脑里有代码,手机回复,不方便敲
#2
数据都有了,对窗体上的控件属性直接复制呗
#3
不要Sleep。
收到数据后先判断一下数据的完整性,如果不完整,那就把数据留着,等下次的来的合在一起再判断,如果完整那就显示。和TCP里处理粘包的方法差不多。
输出时,如果显示的速度根不上数据接收的速度,那就定时刷新;如果跟得上,那就收到数据后用Invoke或BeginInvokl显示。
收到数据后先判断一下数据的完整性,如果不完整,那就把数据留着,等下次的来的合在一起再判断,如果完整那就显示。和TCP里处理粘包的方法差不多。
输出时,如果显示的速度根不上数据接收的速度,那就定时刷新;如果跟得上,那就收到数据后用Invoke或BeginInvokl显示。
#4
由于接受数据 速度较快,一般将数据存放到 队列中进行处理。
#5
c#写的串口调试助手,代码有很多。下一份,自学一下。