0

我正在使用这个(链接)库来检测 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覆盖而不是正常执行?我希望能够在分离事件中关闭端口。

4

0 回答 0