C# 结束串口基本流读取的正确方法

C# 结束串口基本流读取的正确方法,c#,serial-port,C#,Serial Port,我使用Ben Voigt的解决方案在c#中构建了一个串行记录器 我尝试过的所有其他方法都以这样或那样的方式失败了(本·沃格特在他的优秀页面上详细解释了原因)。现在我只剩下两个问题: 1) 。如何优雅地停止侦听串行端口?如果我关闭该组件,它将引发一个严重的异常 2) 。如果在特定时间内没有收到数据,是否有一种优雅的方式来引发事件 byte[] buffer = new byte[blockLimit]; Action kickoffRead = null; kickoffRead = deleg

我使用Ben Voigt的解决方案在c#中构建了一个串行记录器

我尝试过的所有其他方法都以这样或那样的方式失败了(本·沃格特在他的优秀页面上详细解释了原因)。现在我只剩下两个问题:

1) 。如何优雅地停止侦听串行端口?如果我关闭该组件,它将引发一个严重的异常

2) 。如果在特定时间内没有收到数据,是否有一种优雅的方式来引发事件

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();