Асинхронные удаленные вызовы WMI C # - PullRequest
0 голосов
/ 16 мая 2019

Я действительно изо всех сил пытаюсь получить данные WMI с удаленного хоста асинхронным способом. После долгих исследований я не могу найти четких примеров, документация Microsoft содержит только код на VB и C ++, и есть даже статьи, объясняющие, почему это плохая идея. Я пришел из PowerShell, с этим я просто создал бы новое пространство выполнения для получения информации.

В настоящее время у меня есть окно WPF, которое я хочу отвечать, пока запрашиваю информацию перед обновлением окна. В настоящее время мне удалось использовать только синхронные вызовы с использованием CimSession.Create и QueryInstance.

Буду очень признателен за помощь:)

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

После того, как я предложил тот же вопрос на форумах 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();
}
0 голосов
/ 29 мая 2019

Вы можете использовать ORMi асинхронные методы для выполнения асинхронной работы WMI. Например:

WMIHelper helper = new WMIHelper("root\\CimV2");
List<Processor> processors = await helper.QueryAsync<Processor>().ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...