.NET串口通信中將`0X1A`當做EOF處理,.NET接收到EOF會觸發一次接收中斷,此時事件形參`SerialDataReceivedEventArgs`值為枚舉 `Eof`,其他為`Chars`。
參考: stackoverflow 、MSDN
## 測試
.NET編程,中斷方式接收,發送一串數據后等待回應,打印進中斷次數;另外一端用串口助手來實現。通信用虛擬串口。
[TestClass] public class EofByteSerialTest { private int _count = 0; private byte[] _receivedDataPacket; SerialPort _serialPort = new SerialPort() { PortName = "COM5", BaudRate = 115200, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None }; [TestMethod] public void TestMethod1() { _serialPort.Open(); byte[] sendedData = { 0x01, 0x02, 0x03, 0x1a, 0x2a, 0x1a }; _serialPort.DataReceived += ComReceive; _serialPort.Write(sendedData, 0, sendedData.Length); Thread.Sleep(10000); //foreach (byte b in _receivedDataPacket) //{ // Console.WriteLine(b); //} Console.WriteLine(_count); } private void ComReceive(object sender, SerialDataReceivedEventArgs e) { //if (e.EventType == SerialData.Eof) //{ // //特殊處理 //} _count++; _receivedDataPacket = new byte[_serialPort.BytesToRead]; _serialPort.Read(_receivedDataPacket, 0, _receivedDataPacket.Length); // 協議解析... } }
串口助手數據:

測試結果:

