串口的速度本来就很慢啊,不加Sleep接受不全是正常的吧。。
反正我是一直加延迟的~

解决方案 »

  1.   


    加了Sleep更不正常,你用DataReceived 必须要用到串口间的数据协议,作个缓冲区
      

  2.   

    因为串口一边在接收数据一边触发事件
    比如串口需要收到100个字节,但是第10个字节的时候触发了DataReceived事件,这时候只会读到10个字节,剩下的会在下一次触发事件时接收,而楼主用局部变量存放读取到的数据,所以只保存了最后一次读取到的数据,误以为数据接收不全可以定义个全局变量来存放接收到的数据,这样不至于每次被新接收到的数据覆盖掉string receiveStr = Builder.ToString();
    receiveStr = receiveStr.Replace(" ", "");
    //将接收字符串ODOA阶段,第一部分为发送指令,第二部分为接收到数据,第三部分为>(3e)
    string[] receiveArr = receiveStr.Split(new string[] { "0D0A" },                               StringSplitOptions.RemoveEmptyEntries);   
    将receiveStr定义成全局变量,每次接受到数据receiveStr+=Builder.ToString()