如何设置便携式设备检测的单个实例

时间:2014-06-18 08:23:44

标签: c# android winforms wpd

我试图在插入便携式设备时抓住该事件并且能够这样做。我的问题是它调用了两个插入事件。

这是我的代码:

 private void DeviceInsertedEvent(object sender, EventArrivedEventArgs e)
    {
            MessageBox.Show("Device Received");
    }

private void DeviceRemovedEvent(object sender, EventArrivedEventArgs e)
{
        MessageBox.Show("Device Removed");
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    WqlEventQuery insertQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 3 WHERE TargetInstance ISA 'Win32_PnPEntity'");
    ManagementEventWatcher insertWatcher = new ManagementEventWatcher(insertQuery);
    insertWatcher.EventArrived += new EventArrivedEventHandler(DeviceInsertedEvent);
    insertWatcher.Start();

    WqlEventQuery removeQuery = new WqlEventQuery("SELECT * FROM __InstanceDeletionEvent WITHIN 3 WHERE TargetInstance ISA 'Win32_PnPEntity'");
    ManagementEventWatcher removeWatcher = new ManagementEventWatcher(removeQuery);
    removeWatcher.EventArrived += new EventArrivedEventHandler(DeviceRemovedEvent);
    removeWatcher.Start();
}

当我将手机插入电脑时。收到的两个设备发生了。

enter image description here

如何让它在第一个实例上停止?

1 个答案:

答案 0 :(得分:0)

一个相当不干净的解决方案是这样的:

WqlEventQuery insertQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 3 WHERE     TargetInstance ISA 'Win32_PnPEntity'");
ManagementEventWatcher insertWatcher = new ManagementEventWatcher(insertQuery);

EventArrivedEventHandler eventArrivedhandler = (sender, e) => { };
eventArrivedhandler = (sender, e) =>
{
    insertWatcher.EventArrived -= eventArrivedhandler;
    DeviceInsertedEvent(sender,e);
};
insertWatcher.EventArrived += eventArrivedhandler;
insertWatcher.Start();

我不能说我喜欢它,但它很可能会成功。