我正在使用这个(链接)库来检测 USB 设备的附加和分离事件。在检测到连接了正确的设备(使用特定的 VID/PID 组合识别)后,我打开了一个串行端口连接,类似地,当设备分离时,我关闭了串行端口连接。
我的附加事件效果很好,最后我得到了一个可以使用的串行端口,但我在分离事件中遇到了问题。分离事件正确触发,但是当代码执行到达closeCOM(serialPort1)
点时,它会跳转到wndProc
覆盖循环并阻止执行 closeCOM()
以及随后发生的任何事情。
该库需要WndProc
消息来检测事件,我的代码是这样实现的:
//Catch Windows messages and pass them to the USBClass class
protected override void WndProc(ref Message m)
{
USBPort.ProcessWindowsMessage(ref m);
base.WndProc(ref m);
}
然后我有一个执行以下代码的分离事件:
if (!USBClass.GetUSBDevice(VID, PID, ref USBDeviceProperties, false) && USBDeviceConnected)
{
//Device is removed
USBDeviceConnected = false;
//Close COM port just in case we forgot to disconnect
closeCOM(serialPort1);
//update status strip
strip_device_status.Text = "Disconnected";
}
这是closeCOM
功能:
//This function handles COM port closing.
private void closeCOM(SerialPort port)
{
// If a serial port is open, disconnect it
if (port.IsOpen)
{
// close the serial port
port.Close();
}
//update com port status flag
COMConnected = false;
//update status strip
strip_COM_status.Text = "Disconnected";
}
尤其是closeCOM()
导致这种“冲突”的原因是,如果我注释掉该行,一切正常,除了我留下一个开放的串行端口,以后可能会导致错误。我做错了什么导致代码跳转到WndProc
覆盖而不是正常执行?我希望能够在分离事件中关闭端口。