我使用的是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个字节。我不希望它第二次调用。
答案 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
//...
}