C#错误的串行数据读取

时间:2018-06-30 18:18:16

标签: c#

我正在WinForms中创建一个C#应用程序,该应用程序应该使用串行通讯(SerialPort类)。

我的应用程序的想法很简单: 1)我将PC应用程序连接到COM端口,并连接到硬件设备(微控制器)。 2)当我按下UI中的按钮时,应用程序应开始通过串行将某些数据发送到该设备,然后将其接收回(反映)。

您能否告诉我: 1)我正在使用正确的接收方式,或者还有另一种更好的接收方式。 2)我观察到串行缓冲区中的数据随着时间累积,并且我开始收到比预期更多的数据,并且我需要一种方法在每次传输之前清空此串行缓冲区,因此当我读取数据时,我只会收到最后一个消息已反映。

对于接收,我使用轮询模式,并且使用“ SerialPort”类中的方法“ Read()”

 // this is my thread
      private void Receive()
    {
        // keepReading is bool variable 
        // to stop the thread
        while (continueToRead)
        {
            if (ComPort.IsOpen)
            {
                int arrayLength = ComPort.BytesToRead;
                byte[] newReceivedData = new byte[arrayLength];

                try
                {
                    Read(ref newReceivedData, 0, arrayLength);
                    buffer.AddRange(newReceivedData);

                     // lastMessageSentLength-this variable
                     // equals to numbers of bytes sent in last message
                     // so I expect to receive the same bytes
                     if (buffer.Count >= lastMessageSentLength)
                     {
                          // I tried to empty buffer with this flush method,
                          // but it didn't help :(
                          // ComPortUart.BaseStream.Flush();

                          buffer.RemoveRange(0, arrayLength);
                     }

                }
                catch (TimeoutException)
                {
                }
            }
            else
            {
                TimeSpan wait = new TimeSpan(0, 0, 0, 0, 40);
                Thread.Sleep(wait);
            }
        }
    }

预先感谢

0 个答案:

没有答案