繁体   English   中英

如何在异步调用时让 ManagementObjectSearcher 返回 ManagementObjectCollection?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM