C#串口接收1次数据会进入2次串口接收事件rialPort1_DataReceived。。。

更新时间:2023-07-13 03:33:11 阅读: 评论:0

C#串⼝接收1次数据会进⼊2次串⼝接收事件
rialPort1_DataReceived。。。箕裘是什么意思
在C#中使⽤串⼝接收数据时发现,在完整的接收完⼀次数据后,还会再次进⼊串⼝接收事件。
在⽹上搜索资料发现其他开发者也有遇到该问题:
其中[2]提到:串⼝接收事件触发2次是正常的,第1次是有数据接收,第2次收到的是EOF标志,直接忽略掉第2次就好了。
在串⼝接收事件开头加⼊该部分判断后如下:
感恩老师手抄报private void rialPort1_DataReceived(object nder, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//接收到EOF则直接退出
if (e.EventType == System.IO.Ports.SerialData.Eof)
{
return;
}
...
}
在串⼝接收事件的if语句处设置断点进⾏调试,第⼀次进⼊时:e.EventType 为System.IO.Ports.SerialData.Chars,串⼝缓冲区有3个字节需读取。
第2次进⼊时:e.EventType 仍为System.IO.Ports.SerialData.Chars,串⼝缓冲区有0个字节需读取。
苹果耳机操作
通过程序调试可知:程序第2次进⼊串⼝接收事件并不是因为接收到EOF标志即System.IO.Ports.SerialData.Eof,⽽是接收到
System.IO.Ports.SerialData.Chars,但接收到的字节长度为0。
因此,通过加⼊if (e.EventType == System.IO.Ports.SerialData.Eof) return;的⽅式并不可⾏。既然可以保证在第1次进串⼝接收事件就将数据接收完毕,且第2次进⼊串⼝接收事件的数据长度为0。则可通过判断接收字节长度为0就直接退出的⽅式忽略掉第2次进⼊的串⼝接收事件。
添加判断后的代码如下所⽰:经验证该⽅法可⾏,可以忽略掉第2次进⼊串⼝接收事件。具体导致进⼊第2次串⼝接收事件的原因还不明确,需继续探究!
private void rialPort1_DataReceived(object nder, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//if (e.EventType == System.IO.Ports.SerialData.Eof)
//添加此判断在接收完⼀帧数据后,第2次意外进⼊时会直接退出
if (rialPort1.BytesToRead == 0)
龙须菜的功效与作用{
return; //串⼝数据长度为0则直接退出
}
//串⼝接收并不是接收的每个字节都会进⼊该事件,因此需在该事件中接收完数据
Int32 readByteNum = 0;
/* 等待数据接收完成,即3mS内串⼝接收到的数据长度不再变化则认为数据已经接收完成 */
do
{
readByteNum = rialPort1.BytesToRead;
System.Threading.Thread.Sleep(10);
} while (readByteNum < rialPort1.BytesToRead && rialPort1.BytesToRead < 4096);
队名和口号大全rialPort1.Read(usartRecvBuffer, 0, readByteNum);  //将串⼝缓冲区的数据保存⾄接收缓冲区酸菜白肉的做法
rialPort1.DiscardInBuffer();                      //清空串⼝缓冲区的内容
//显⽰串⼝接收到的数据
string str = string.Empty;
for (int i = 0; i < readByteNum; i++)
涮羊肉蘸料
{
str += (usartRecvBuffer[i].ToString("X02") + ' ');
}井蛙
#if USE_DELEGATE
this.UpdataControl(tboxRecv, str);
#el
tboxRecv.Text = str;
#endif
}
微软官⽅对 SerialPort.DataReceived 事件 的使⽤说明:

本文发布于:2023-07-13 03:33:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1079350.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:接收   数据   事件   长度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图