【问题标题】:C# backgroundworker & eventhandler together - searching USB devicesC# backgroundworker 和 eventhandler 一起 - 搜索 USB 设备
【发布时间】:2015-07-07 07:11:05
【问题描述】:

我是第一次使用 BackGroundWorker 和 EventHandler。我不知道我做的是否正确。我想搜索已连接的 USB 设备(仅具有特定的 VID 和 PID)。因为通过调试程序不想进入 bw_worker_dowork 循环。

我还使用带有 MVVM 方法的 WPF - 供参考。

请帮忙。我做对了吗?

    BackgroundWorker bw_worker;
    USBmiddleware cs = new USBmiddleware();


    public Windows1ViewModel()
    {
        bw_worker = new BackgroundWorker();
        bw_worker.DoWork += new DoWorkEventHandler(bw_worker_dowork);
        bw_worker.WorkerReportsProgress = true;
        bw_worker.WorkerReportsProgress = true;


    }

    void bw_worker_dowork(object sender, DoWorkEventArgs e)
    {
        WqlEventQuery insertQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'");

        ManagementEventWatcher insertWatcher = new ManagementEventWatcher(insertQuery);
        insertWatcher.EventArrived += new EventArrivedEventHandler(DeviceInsertedEvent);
        insertWatcher.Start();

        WqlEventQuery removeQuery = new WqlEventQuery("SELECT * FROM __InstanceDeletionEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'");
        ManagementEventWatcher removeWatcher = new ManagementEventWatcher(removeQuery);
        removeWatcher.EventArrived += new EventArrivedEventHandler(DeviceRemovedEvent);
        removeWatcher.Start();

        // Do something while waiting for events
        System.Threading.Thread.Sleep(20000000);
    }

    void DeviceInsertedEvent(object sender, EventArrivedEventArgs e)
    {
        cs.FindDevices();
    }

    void DeviceRemovedEvent(object sender, EventArrivedEventArgs e)
    {
        cs.FindDevices();
    }     

【问题讨论】:

  • 我只想打开 Windows 并一直在后台搜索 USB 设备 :)
  • 您根本不需要BackgroundWorker,只要insertWatcherremoveWatcher 对象仍在范围内。将bw_worker_dowork 方法的内容(除了Sleep)移动到构造函数中,它应该可以工作。
  • 我也测试了没有BackgroundWorker的版本,但是我有一个问题,当我插入或拔出设备时什么都没有发生

标签: c# mvvm backgroundworker eventhandler


【解决方案1】:

您没有启动 BackgroundWorker ! BackgroundWorker.RunWorkerAsync Method

【讨论】:

  • 谢谢!但是现在当我拔下设备并重新插入时,什么也没发生:)
  • EventWatcher 不是 EventWatcher 吗? :) 当某事发生然后反应发生?还是我弄错了(因为我对 C# 很陌生)?
  • 或者我做错了什么,因为我在MVVM的ViewModel中定义了EventWatcher?或者它是如何正确的?
  • 对不起,我对 EventWatcher 或 MVVM 一无所知!.. :(
【解决方案2】:

对不起。问题出现了:

之前:

"SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'"

现在:

"SELECT * FROM Win32_DeviceChangeEvent WHERE       EventType = 2"

以前只能在我的 USB 耳机上工作,现在也可以在我的其他设备上工作 :) 抱歉。

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多