簡體   English   中英

異步遠程WMI調用C#

[英]Asynchronous Remote WMI Calls C#

我真的很難以異步方式從遠程主機獲取WMI數據。 經過大量的研究,我找不到任何明確的例子,微軟的文檔只有VB和C ++代碼,甚至有文章解釋為什么這是一個壞主意。 我來自PowerShell,我只想創建一個新的運行空間來獲取信息。

我目前有一個WPF窗口,我希望在更新窗口之前查詢信息時保持響應。 我目前只使用CimSession.Create和QueryInstance設法使用同步調用。

我真的很感激這個幫助:)

您可以使用ORMi異步方法執行異步WMI工作。 例如:

WMIHelper helper = new WMIHelper("root\\CimV2");
List<Processor> processors = await helper.QueryAsync<Processor>().ToList();

在向MSDN論壇提出同樣的問題后,我得到了正確的答案,並認為我也會在這里分享:)我已經在代碼中添加了注釋來解釋發生了什么:

//Used to define what is returned in the async results
public static CimAsyncMultipleResults<CimInstance> GetValues(CimSession _session)
{
    return _session.QueryInstancesAsync(@"root\cimv2", "WQL", "SELECT Username FROM Win32_ComputerSystem");
}

//This watches the async progress
class CimInstanceWatcher : IObserver<CimInstance>
{
    public void OnCompleted()
    {
        Console.WriteLine("Done");
    }

    public void OnError(Exception e)
    {
        Console.WriteLine("Error: " + e.Message);
    }

    public void OnNext (CimInstance value)
    {
        Console.WriteLine("Value: " + value);
    }
}

private static void Main()
{
    //Leaving cimsession creation as sync because is happens "instantly"
    CimSession Session = CimSession.Create("PC-NAME");
    //Creating a new watcher object
    var instanceObject = new CimInstanceWatcher();
    //Subscribing the watcher object to the async call
    GetValues(Session).Subscribe(instanceObject);
    Console.ReadLine();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM