我正在使用此(link)库来检测USB设备的附加和分离事件。检测到连接的正确设备(用特定的VID / PID组合标识)后,我打开一个串口连接,类似地,当设备分离时,我关闭串口连接。
我的附加活动很有效,最后我得到了一个可以使用的串口,但我在分离事件中遇到了问题。 detach事件正确触发,但是当代码执行到达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);
}
然后我有一个detach事件,它执行以下代码:
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
覆盖而不是正常执行?我希望能够在分离事件中关闭端口。