【发布时间】: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,只要insertWatcher和removeWatcher对象仍在范围内。将bw_worker_dowork方法的内容(除了Sleep)移动到构造函数中,它应该可以工作。 -
我也测试了没有BackgroundWorker的版本,但是我有一个问题,当我插入或拔出设备时什么都没有发生
标签: c# mvvm backgroundworker eventhandler