串口对象的DataReceived事件触发两次

时间:2015-05-18 06:12:34

标签: c# winforms serial-port

我使用的是Visual C#2010 Windows窗体应用程序串口  对象在串口上接收十六进制数据字节 但是,我意识到我的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 FF FF FB FB FB FB上发送8个十六进制字节,它们通过读取功能在数据阵列中接收。但在此之后 第二次调用PortData函数读取0个字节。我不希望它第二次调用。

1 个答案:

答案 0 :(得分:6)

收到二进制数据时,这是完全正常的。忘记检查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
        //...
    }