0

ポータブル デバイスが挿入されたときにイベントをキャッチしようとしましたが、それができました。私の問題は、挿入の 2 つのイベントを呼び出したことです。

これが私のコードです:

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

電話をコンピューターに挿入したとき。受け取ったデバイスの2つのケースが発生しました。

ここに画像の説明を入力

最初のインスタンスで停止するにはどうすればよいですか?

4

1 に答える 1

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

私はそれが好きだとは言えませんが、おそらくうまくいくでしょう。

于 2014-06-18T08:42:59.873 に答える