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字节。我不希望它第二次调用。
当您接收二进制数据时,这是完全正常的。忘记检查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
//...
}