关闭COM端口后为什么要获取数据?

时间:2015-08-25 22:34:47

标签: c# c#-4.0 port

我有从开放COM端口收到数据的方法:

 private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;

            try
            {
                if (sp.IsOpen)
                {
                    if (sp.BytesToRead > 0)
                    {
                      // Get data
                    }
                 }
              }
}

我也有连接COM端口的方法:

private void connectPort()
{
SerialPort mySerialPort = new SerialPort(port);
...
}

当我调用关闭端口的方法时:

mySerialPort.DiscardInBuffer();
mySerialPort.DiscardOutBuffer();
mySerialPort.Close();

我从设备获取数据后仍然是。有什么问题?

1 个答案:

答案 0 :(得分:1)

我不确定,但是从docs来看,这听起来像是从另一个线程引发数据的事实可能是缓冲和/或滞后于实际数据(加上它可能)让你在丢弃缓冲区和关闭缓冲区之间接收数据。

我可能先取消DataReceivedHandler,然后关闭连接,最后丢弃数据,例如

mySerialPort.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler);