这是我的一些代码,有效:
SelectQuery query = new SelectQuery("Win32_SystemDriver")
{
Condition = "Name = 'FTDIBUS'"
};
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection drivers = searcher.Get();
但我想异步调用它。我看到searcher.Get()有一个重载异步运行,它通过传递ManagementOperationObserver
实例来工作。
我不知道的是如何实际让它返回同一个系列。这就是我到目前为止所拥有的:
private bool _completed = false;
public void QueryDrivers()
{
SelectQuery query = new SelectQuery("Win32_SystemDriver")
{
Condition = "Name = 'FTDIBUS'"
};
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementOperationObserver results = new ManagementOperationObserver();
results.Completed += new CompletedEventHandler(QueryComplete);
searcher.Get(results);
while (!_completed)
{
Thread.Sleep(100);
}
// how do i access my ManagementObjectCollection here?
//ManagementObjectCollection drivers = ????
}
private void QueryComplete(object sender, CompletedEventArgs e)
{
_completed = true;
}
答案 0 :(得分:0)
订阅ObjectReady,您将在那里一一收到所有ManagementObjects:
results.ObjectReady+= Obs_ObjectReady;
...
// this will get called as many times as you have objects in the expected collection
private void Obs_ObjectReady(object sender, ObjectReadyEventArgs e)
{
var obj = e.NewObject as ManagementObject;
}