hhhljlishen 2018-06-19 14:51 采纳率: 66.7%
浏览 5137
已采纳

C#中怎么让SerialPort接收到一个字节就触发DataReceived时间?

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

  • 写回答

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可以关闭串口
    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?