在PenDrive附加和分离上引发事件

本文关键字:事件 分离 PenDrive | 更新日期: 2023-09-27 17:49:35

在我的应用程序中,我想在笔驱动器附加和分离事件上引发事件。我使用了下面的代码来引发事件。

private ManagementEventWatcher watcherAttach;
private ManagementEventWatcher watcherRemove;        
watcherAttach = new ManagementEventWatcher();
watcherAttach.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcherAttach.Query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
watcherAttach.Start();

watcherRemove = new ManagementEventWatcher();
watcherRemove.EventArrived += new EventArrivedEventHandler(watcher_EventRemoved);
watcherRemove.Query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 3");
watcherRemove.Start();

// this are events
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
     // code to execute
}
void watcher_EventRemoved(object sender, EventArrivedEventArgs e)
{
   //code to execute
}

但问题是,这两个事件都引发了两次,我的代码在两个事件中都没有完全执行,有人能建议我如何克服这一点吗?

在PenDrive附加和分离上引发事件

我认为最简单的方法是取消订阅事件,然后做你的工作并再次订阅。当你取消订阅时,插入其他设备的可能性很小。在处理键盘上的双击时,我也是这样做的。

// this are events
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
watcherAttach.EventArrived -= new EventArrivedEventHandler(watcher_EventArrived);
     // code to execute
watcherAttach.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
}
void watcher_EventRemoved(object sender, EventArrivedEventArgs e)
{
watcherRemove.EventArrived -= new EventArrivedEventHandler(watcher_EventRemoved);
   //code to execute
watcherRemove.EventArrived += new EventArrivedEventHandler(watcher_EventRemoved);
}