M2M crashes

To setup the USB events.

Add this declaration in the class, ManagementEventWatcher eventWatcher;
Include using System.Management; in the top of the source file.

In project, add referenece to the system management.

To setup the USB event add the following code to initialisation function.

WqlEventQuery eventQuery = new WqlEventQuery();
            eventQuery.EventClassName = "__InstanceOperationEvent";
            eventQuery.WithinInterval = new TimeSpan(0, 0, 1);
            eventQuery.Condition = @"TargetInstance ISA 'Win32_USBControllerDevice' ";

            eventWatcher = new ManagementEventWatcher(eventQuery);
            eventWatcher.EventArrived += new EventArrivedEventHandler(eventWatcher_EventArrived);
            eventWatcher.Start();

Add the event code.

private void eventWatcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            ManagementBaseObject mbo = (ManagementBaseObject)e.NewEvent["TargetInstance"];
            using (ManagementObject mo = new ManagementObject(mbo["Dependent"].ToString()))
            {
                if (mo != null)
                {
                    try
                    {
                        mo.Get();
                        /* Wavecom vendor ID is always 0x114F and Q26 product ID is 0x1234 */
                        if (mo.GetPropertyValue("DeviceID").ToString().Contains("VID_114F&PID_1234"))
                        {
                            objQ26Comms.Open(Q26Port);
                            USBConnectionFlag = true;
                        }
                    }
                    catch (ManagementException)
                    {
                        if (objQ26Comms != null)
                        {
                            objQ26Comms.Close();
                        }
                        USBConnectionFlag = false;
                    }
                }
            }
        }