2014-06-18 6 views
0

휴대용 장치를 넣었을 때 이벤트를 잡으려고 시도했습니다. 내 문제는 그것이 삽입의 두 가지 사건을 호출했다는 것입니다.휴대용 장치 감지 단일 인스턴스 설정 방법

여기 내 코드입니다 : 내 휴대폰을 컴퓨터에 삽입

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

는 어떻게하면 첫 번째 인스턴스에 중지해야합니까?

+0

무엇이 문제입니까? – JohnSaps

+0

'ManagementEventWatcher insertWatcher'를 global로 만들고, 장치가 처음 발견 될 때'insertWatcher.Stop()'을 넣으십시오. 제거 될 때'insertWatcher.Start()'를 제거 된 이벤트에 넣는다. – Ricky

+0

@JohnSaps 첫 번째 인스턴스에서 어떻게 중지합니까? –

답변

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

나는 내가 그것을 좋아하는 것을 말할 수 있지만 트릭을 할 가능성이 가장 높은 것입니다.