.NET 串行端口 - 接收丢失的数据

.NET serial-ports - receiving missing data

我正在开发一个串口应用程序。而且我无法正确接收数据。我正在使用 ReadExisting() 来读取即将到来的数据。

这是我的代码。请指教,接收数据的正确方法是什么,如果我想检查每条消息的长度和格式的有效性怎么办。

public void serialport_connect(String port, int baudrate, Parity parity, int databits, StopBits stopbits)
        {
            DateTime dt = DateTime.Now;
            String dtn = dt.ToShortTimeString();

            sport = new System.IO.Ports.SerialPort(port, baudrate, parity, databits, stopbits);

            try
            {
                sport.Open();
                status.AppendText("[" + dtn + "] " + "Connected\n");
                sport.DataReceived += new SerialDataReceivedEventHandler(sport_DataReceived);
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error"); }
        }

        private void sport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            DateTime dt = DateTime.Now;
            String dtn = dt.ToShortTimeString();
            String comingData = sport.ReadExisting();

            if (comingData != String.Empty)
            {
                Dispatcher.Invoke(new Action(() =>
                {
                    current.AppendText("[" + dtn + "] " + "Received: " + sport.ReadExisting() + "\n");
                }));
            }

        }

谢谢。

您的事件循环比以 9600 波特率发送单个字符所需的时间快得多。我建议将接收到的字符附加到字符串中,直到您收到像“\n”这样的终止字符或收到您期望的字符数。

这是一个项目的示例,我在其中等待直到收到 10 个字符:

int datalen = serialPort1.BytesToRead;
label1.Text="Readexisting";
if (datalen >=10)
{
    string data = serialPort1.ReadExisting();
    label1.Text=data;
}