[英]How can I get a ManagementObjectSearcher to return a ManagementObjectCollection when called asynchronously?
这是我拥有的一些代码,它有效:
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;
}
订阅 ObjectReady,您将在那里一一收到所有管理对象:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.