串口DataReceived发射太多

Ale*_*dre 0 c# serial-port

我正在处理一个来电显示串行设备并编写以下程序:

serialPort = new SerialPort("COM7", 19200, Parity.None, 8, StopBits.One);
serialPort.DataReceived += serialPort_DataReceived;
serialPort.RtsEnable = true;
serialPort.Encoding = Encoding.ASCII;
serialPort.Open();

void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e)
{
    byte[] data = new byte[serialPort.BytesToRead];
    serialPort.Read(data, 0, data.Length);
    Console.WriteLine(Encoding.ASCII.GetString(data));
}
Run Code Online (Sandbox Code Playgroud)

首先我收到一个电话,事件完全触发,结果是: "A0101181456926E"

问题是随后的事件......下次我打电话时,事件serialPort_DataReceived会发生很多次,每次都有1个字符.

是否有任何属性可以设置或调用方法来解决此问题?

PS.如果我评论该行serialPort.RtsEnable = true;,我不会收到任何后续事件.

Jan*_*Jan 5

正如Henk所提到的,您可以设置在DataReceived使用属性触发事件之前接收的字节数ReceivedBytesThreshold.

但无论如何,您必须处理一次接收的任意数量的字节.您必须以能够在完全接收消息时识别的方式设计协议.