为什么关闭 COM 端口后才能得到数据?
Why I get data after closing COM 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();
我仍然从设备获取数据后。怎么了?
我不确定,但从 docs 看来,从另一个线程中提取的数据可能正在缓冲 and/or 落后于实际数据(此外,您可以在丢弃缓冲区和关闭缓冲区之间接收数据)。
我可能会先解除 DataReceivedHandler 的挂钩,然后关闭连接,最后丢弃数据,例如。
mySerialPort.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler);
我有通过打开 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();
我仍然从设备获取数据后。怎么了?
我不确定,但从 docs 看来,从另一个线程中提取的数据可能正在缓冲 and/or 落后于实际数据(此外,您可以在丢弃缓冲区和关闭缓冲区之间接收数据)。
我可能会先解除 DataReceivedHandler 的挂钩,然后关闭连接,最后丢弃数据,例如。
mySerialPort.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler);