我试图在插入便携式设备时抓住该事件并且能够这样做。我的问题是它调用了两个插入事件。
这是我的代码:
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();
}
当我将手机插入电脑时。收到的两个设备发生了。
如何让它在第一个实例上停止?
答案 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();
我不能说我喜欢它,但它很可能会成功。