如何使用覆盖WndProc消息来检测USB连接/分离

时间:2012-10-10 10:37:56

标签: c# usb serial-port override wndproc

我正在使用此(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覆盖而不是正常执行?我希望能够在分离事件中关闭端口。

0 个答案:

没有答案