C# 为什么在关闭COM端口后获取数据?

C# 为什么在关闭COM端口后获取数据?,c#,c#-4.0,port,C#,C# 4.0,Port,我有从打开COM端口接收数据的方法: private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; try { if (sp.IsOpen) {

我有从打开COM端口接收数据的方法:

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

            try
            {
                if (sp.IsOpen)
                {
                    if (sp.BytesToRead > 0)
                    {
                      // Get data
                    }
                 }
              }
}
private void connectPort()
{
SerialPort mySerialPort = new SerialPort(port);
...
}
我还有一个方法,可以连接到COM端口:

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

            try
            {
                if (sp.IsOpen)
                {
                    if (sp.BytesToRead > 0)
                    {
                      // Get data
                    }
                 }
              }
}
private void connectPort()
{
SerialPort mySerialPort = new SerialPort(port);
...
}
调用关闭端口的方法时:

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

在我从设备上获取数据之后。出了什么问题?

我不确定,但从这个角度看,从另一个线程引发的数据可能正在缓冲和/或滞后于实际数据(另外,您有可能在丢弃缓冲区和关闭缓冲区之间接收数据)

我可能会先解开DataReceivedHandler,然后关闭连接,最后丢弃数据,例如

mySerialPort.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler);