Partilhar via


Como Executar uma Consulta Assíncrona ao Utilizar a Gestão de Sistemas

Para realizar uma consulta assíncronea num cliente do Gestor de Configuração Windows espaço de nomes de Instrumentação (WMI), crie um ManagementObjectSearcher objeto que especifique uma consulta WQL. Em seguida, cria-se um ManagementOperationObserver manipulador de eventos para cada resultado de consulta e também para o final da consulta.

A consulta assíncronea é executada quando o ManagementObjectSearcher método do objeto Get é chamado com o ManagementOperationObserver objeto.

Para realizar uma consulta assíncronea

  1. Configurar uma ligação ao espaço de nomes WMI do cliente do Gestor de Configuração. Para obter mais informações, consulte Como Ligação ao Espaço de Nome WMI do Cliente WMI do Gestor de Configuração utilizando o System.Management.

  2. Criar um ManagementObjectSearcher objeto.

  3. Criar um ManagementOperationObserver objeto.

  4. Adicione um ObjectReadyEventHandler método o ManagementOperationObserver objeto.

  5. Adicione um CompletedEventHandler método ao ManagementOperationObserver .

  6. Chame o ManagementObjectSearcher objeto Obter o método e forneça o objeto como ManagmentOperationObserver parâmetro.

  7. Certifique-se de que a sua aplicação ainda funciona enquanto a consulta é executada.

Exemplo

As consultas de exemplo de código C# para componentes instalados num cliente.

Para obter informações sobre a chamada do código de amostra, consulte como chamar um método de classe WMI utilizando o sistema.Management.


public void EnumerateInstancesAsync(ManagementScope scope)  
{  
    try  
    {  
        // Instantiate an object searcher with the query.  
        ManagementObjectSearcher searcher =  
            new ManagementObjectSearcher(scope, new  
            SelectQuery("CCM_InstalledComponent"));  

        // Create a results watcher object  
        // and handler for results and completion.  
        ManagementOperationObserver results = new  
            ManagementOperationObserver();  

        // Attach handler to events for results and completion.  
        results.ObjectReady += new  
            ObjectReadyEventHandler(this.NewObject);  
        results.Completed += new  
            CompletedEventHandler(this.Done);  

        Console.WriteLine("Installed Components");  
        Console.WriteLine("--------------------");  
        Console.WriteLine();  

        // Call the asynchronous overload of Get()  
        // to start the enumeration.  
        searcher.Get(results);  

        // Do something else while results  
        // arrive asynchronously.  
        while (!this.Completed)  
        {  
            System.Threading.Thread.Sleep(1000);  
        }  

        this.Reset();  
    }  
    catch (ManagementException e)  
    {  
        Console.WriteLine("Failed to run query: " + e.Message);  
        throw;  
    }  

}  

private bool isCompleted = false;  

private void NewObject(object sender,  
    ObjectReadyEventArgs obj)  
{  
    try  
    {  
        Console.WriteLine("Name: {0}, Version = {1}",  
            obj.NewObject["DisplayName"],  
            obj.NewObject["Version"]);  
    }  
    catch (ManagementException e)  
    {  
        Console.WriteLine("Error: " + e.Message);  
    }  

}  

private bool Completed  
{  
    get  
    {  
        return isCompleted;  
    }  
}  

private void Reset()  
{  
    isCompleted = false;  
}  

private void Done(object sender,  
         CompletedEventArgs obj)  
{  
    isCompleted = true;  
}  

Este método de exemplo tem os seguintes parâmetros:

Parâmetro Tipo Description
Scope ManagementScope Um válido ManagementScope . O caminho deve ser raiz\ccm.

A Compilar o Código

Espaços de nomes

Sistema.

Sistema.Gestão.

Assemblagem

Sistema.Gestão.

Programação Robusta

A exceção que pode ser levantada é System.Management.ManagementException.

Consulte também

Sobre a programação do Gestor de Configuração WMI
Como chamar um método de classe WMI usando o sistema.Management
Como Ligação ao espaço de nomes WMI do Gestor de Configuração WMI usando system.Management
Como realizar uma consulta sincronizada utilizando o sistema.Management
Como ler um objeto WMI usando o sistema.Management