串口通信,數據會被分多次收到的處理方法


1、串口接收數據部分

    private void Sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {            
            Byte[] receivedData = new Byte[sp1.BytesToRead];
            sp1.Read(receivedData,0, receivedData.Length);

            lock (obj)
            {
                receiveBuf.AddRange(receivedData);
            }
        }

2、線程中處理接收到的數據

    ThreadPool.QueueUserWorkItem(ProData);

全局變量:List<byte> receiveBuf = new List<byte>();
private
void ProData(object state) { List<byte> tmp = new List<byte>(); byte[] _HeaderBuffer = new byte[8]; while (IsOpen) { if (receiveBuf.Count > 8) { receiveBuf.CopyTo(0, _HeaderBuffer, 0, 8);
//根據協議取出總包長
var ilen = RcsMessage.CheckData(_HeaderBuffer);
//如果已經接收到的數據大於一個完整的數據,從ReceiveBuf截取這部分數據工處理,
if (receiveBuf.Count >= ilen&&ilen>10 ) { byte[] receivedata = new byte[ilen]; receiveBuf.CopyTo(0, receivedata, 0, ilen); var str = RcsMessage.ReadData(receivedata); AddContent(str); receiveBuf.RemoveRange(0, ilen); } } Thread.Sleep(100); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM