简体   繁体   English

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

[英]How to set single instance of the portable device detection

I tried to catch the event when a portable device is inserted and was able to do so. 当我插入便携式设备并能够做到时,我试图捕获该事件。 My problem is that it called two events of the insertion. 我的问题是它调用了两个插入事件。

Here is my code: 这是我的代码:

 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();
}

When I inserted the phone to my computer. 当我将手机插入计算机时。 Two cases of the device received happened. 收到设备的两个案例。

在此处输入图片说明

How do I make it stop on the first instance? 我如何使其在第一时间停止?

A rather unclean solution would be something like this: 一个不太干净的解决方案是这样的:

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();

I can't say that i like it but it will most likely do the trick. 我不能说我喜欢它,但是很有可能会成功。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM