2012-12-24 20 views
0

在我的應用程序中,我想提高筆驅動器附加和分離事件的事件。 我用下面的代碼來引發事件。在PenDrive上提起事件Attch和Detach

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 
} 

但問題是,這兩個事件被觸發兩次,我的代碼沒有完全在這兩個事件中執行任何一個可以建議我如何從這個克服?

+0

在代碼中使用try catch,並在代碼中找到異常。 –

+0

但它沒有顯示任何錯誤。 –

+0

是的,有一個錯誤tnx。 –

回答

0

我認爲最簡單的方法是取消訂閱活動,然後完成工作並再次訂閱。當您取消訂閱時,某些其他設備可能會插入的機會很小。我在處理鍵盤上的雙擊鍵時採用了類似的方式。

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