我使用Ben Voigt的解决方案在c#中构建了一个串行记录器
https://www.sparxeng.com/blog/software/must-use-net-system-io-ports-serialport
byte[] buffer = new byte[blockLimit];
Action kickoffRead = null;
kickoffRead = delegate {
port.BaseStream.BeginRead(buffer, 0, buffer.Length, delegate (IAsyncResult ar) {
try {
int actualLength = port.BaseStream.EndRead(ar);
byte[] received = new byte[actualLength];
Buffer.BlockCopy(buffer, 0, received, 0, actualLength);
raiseAppSerialDataEvent(received);
}
catch (IOException exc) {
handleAppSerialError(exc);
}
kickoffRead();
}, null);
};
kickoffRead();
我试过的所有其他方法都以这种或那种方式失败了(Ben Voigt在他出色的页面上详细解释了原因)。现在我只剩下两个问题:
1)。如何优雅地停止收听串口?如果我关闭comport会引发一个令人讨厌的例外。
2)。如果在一段时间内没有收到数据,是否有一种优雅的方式来举办活动?