ReceiveByteThreshold设为1了,但是进入消息处理函数,查看BytesToRead属性,每次都是0xf。
这怎么回事,不能一个字节触发一次吗?

C#中怎么让SerialPort接收到一个字节就触发DataReceived时间?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
7条回答 默认 最新
- alehuifei 2018-06-20 08:12关注
private void bz_comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (closing) return; //如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环
try
{
listening = true; //设置标记,已经开始处理数据,要使用系统UI
Thread.Sleep(60);//用于接收完整信息
if (bz_comm.IsOpen == false) return;
int n = bz_comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
bz_comm.Read(buf, 0, n);//读取缓冲数据
bz_builder.Clear();//清除字符串构造器的内容
//因为要访问ui资源,所以需要使用invoke方式同步ui。
this.Invoke((EventHandler)(delegate
{
foreach (byte b in buf)
{
bz_builder.Append(b.ToString("x2") + " ");
}
bz_info(bz_builder.ToString());
}));
}
finally
{
listening = false; //线程完成 UI可以关闭串口
}
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报