C#串口数据收发接收数据,单条收发的话没问题,但是如果是发送多条数据的话,只会接收到一条数据

我用的是 comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);接收数据,单条收发的话没问题,但是如果是发送多条数据的话,只会接收到一条数据。
private void comPort_DataReceived(Object sender, SerialDataReceivedEventArgs e)
        {

         
                int len = comPort.BytesToRead;
                Byte[] readBuffer = new Byte[len];
                comPort.Read(readBuffer, 0, len); //将数据读入缓存
                buffer.AddRange(readBuffer);

            if (len >= 1)
            {
                try
                {
                    byte[] msg1 = new byte[512];
                    if (buffer.Count != 0)
                    {

                        if (buffer[0] == 0x7e)
                        {
                            if ((buffer.Count) > 5)//前提没转义字符
                            {
                                int msglen = buffer[5] + 8;
                               
                                if (buffer.Count > msglen)
                                {
                                  
                                    if (buffer[msglen] == 0x7f)
                                    {

                                        buffer.CopyTo(0, msg1, 0, msglen + 1);

                                    
                                        string showRcvMsg = protocol.UnpackRcvProtocolData(msg1, msglen + 1);
                                        this.Dispatcher.Invoke(new Action(() =>
                                        {
                                            if (CheckBox_DiscomOrnot.IsChecked == true)
                                            {

                                                LogInfo(LogMsgType.Error, showRcvMsg);

                                            }

                                            ShowUi();
                                        }));
                                        buffer.RemoveRange(0, msglen + 1);



                                    }
                                }
                            }
                        }
                        else
                        {
                            buffer.RemoveRange(0, 1);
                        }

                    }

                }

                catch (Exception ex)
                {

                    LogInfo(LogMsgType.Incoming, "提示信息:接收返回消息异常!具体原因:" + ex.Message);
                }

            

        }

    }
处理不及时建议使用异步线程解析数据,尽早地退出DataReceived事件

我本来用的线程同步lock,但是没有效果,lock这个指令好像没有执行

这要用线程啊,用task 开个线程跑嘛,
除非你是单客户端发送就可以不用

“发送方”是什么?受你控制?
受你控制的话,多条报文之间的间隔控制下,拉长一点。

第一次看到有人把数据处理直接放DataReceived事件里,另建一个处理的方法,用Task调用处理,因为前面就是因为你没有论坛发帖机处理完,第二条数据就来了。
第二种可能你的传输速率太慢,Thread.Sleep(4000)试试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值