Serial Port object's DataReceived事件触发两次

本文关键字:两次 事件 DataReceived object Port Serial | 更新日期: 2023-09-27 17:49:27

我使用visual c# 2010 windows窗体应用程序串口object在串口接收十六进制数据字节。然而,我意识到我的DataReceived事件被触发了两次,即使我已经读取了缓冲区中的所有数据字节,并且缓冲区显示要读取0字节。
这是为什么,又是如何发生的呢?

private void PortData(Object Sender,     System.IO.Ports.SerialDataReceivedEventArgs e)
{
    this.Invoke(new EventHandler(delegate { DisplayText(); }));
}
Private void DisplayText()
{
    int dataLength = serialPort1.BytesToRead;
    byte[] data = new byte[dataLength];
    serialPort1.Read(data, 0, dataLentgh)
}

我在串行端口I -e上发送8个十六进制字节FF FF FB FB FB FF FB这是由Read函数在数据数组中接收的。但是在这之后第二次调用PortData函数读取0字节。我不希望它第二次调用。

Serial Port object's DataReceived事件触发两次

当您接收二进制数据时,这是完全正常的。忘记检查e.EventType属性是一个标准的错误。每当收到字节值0x1A(文件结束字符)时,就会引发该事件。不能设置EOF字符,或者完全禁用它,是一个疏忽。你只能忽略它们:

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) {
        if (e.EventType == System.IO.Ports.SerialData.Eof) return;
        // Rest of code
        //...
    }