Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步远程WMI调用C_C#_Asynchronous_Wmi_Remote Server - Fatal编程技术网

C# 异步远程WMI调用C

C# 异步远程WMI调用C,c#,asynchronous,wmi,remote-server,C#,Asynchronous,Wmi,Remote Server,我真的很难以异步方式从远程主机获取WMI数据。经过大量的研究,我找不到任何明确的例子,微软的文档只有VB和C++代码,甚至有文章解释为什么这是个坏主意。我来自PowerShell,因此我将创建一个新的运行空间来获取信息 我目前有一个WPF窗口,我希望在更新窗口之前查询信息时保持响应。我目前只使用CimSession.Create和QueryInstance使用了同步调用 我非常感谢您的帮助:您可以使用异步方法来执行异步WMI工作。例如: WMIHelper helper = new WMIHel

我真的很难以异步方式从远程主机获取WMI数据。经过大量的研究,我找不到任何明确的例子,微软的文档只有VB和C++代码,甚至有文章解释为什么这是个坏主意。我来自PowerShell,因此我将创建一个新的运行空间来获取信息

我目前有一个WPF窗口,我希望在更新窗口之前查询信息时保持响应。我目前只使用CimSession.Create和QueryInstance使用了同步调用

我非常感谢您的帮助:

您可以使用异步方法来执行异步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();
}

这有用吗@辛瑟姆:我读过,但没什么意义。你知道有没有一个更简单的例子或者我可以从中总结出来的东西吗?我似乎也找不到任何教程……但是我如何在分布式程序中使用它呢?它不需要安装在任何一台机器上吗?不,只需要多个连接。要执行远程WMI工作,您需要域用户。