C# SerialPort类 事件触发接收数据不完整的解决方法问题。

最近用C# SerialPort类做单片机上位机程序,发现一个问题:
     单片机一次发送一批数据(400字节左右)到上位机,上位机利用事件触发方式接收数据。
     刚开始数据接收非常不稳定,上位机经常数据接收不完整。
     后来我在事件处理函数最开始处加入了500ms延时,则每次数据接收就完全OK了。
     不知道这是什么原因。感觉这样虽一时可以解决问题,但是感觉这样会影响接收的实时性。
    是否还有更好的解决方法,让事件触发接收既实时,又能保证数据接收完整?
    下面是我的事件处理程序演示代码:
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
        Thread.Sleep(500);//这个延时非常重要
        
        int n = sp.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
        byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
        sp.Read(buf, 0, n);//读取缓冲数据
        
        //因为要访问ui资源,所以需要使用invoke方式同步ui。
        this.Invoke((EventHandler)(delegate
        {
                for(int i;i<n;i++)
                {
                        textBox1.text += buf[i].ToString();
                }                
        }));
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值