Compartir a través de


Cómo realizar una consulta asincrónica mediante System.Management

Para realizar una consulta asincrónica en un espacio de nombres Configuration Manager instrumental de Windows (WMI) cliente, cree un ManagementObjectSearcher objeto que especifique una consulta WQL. A continuación, cree un ManagementOperationObserver objeto que especifique un controlador de eventos para cada resultado de la consulta y también para el final de la consulta.

La consulta asincrónica se ejecuta cuando se llama al método Get del ManagementObjectSearcher objeto con el ManagementOperationObserver objeto .

Para realizar una consulta asincrónica

  1. Configure una conexión al espacio de nombres WMI de cliente Configuration Manager. Para obtener más información, vea Cómo conectarse al espacio de nombres WMI de cliente Configuration Manager mediante System.Management.

  2. Cree un ManagementObjectSearcher objeto .

  3. Cree un ManagementOperationObserver objeto .

  4. Agregue un ObjectReadyEventHandler método al ManagementOperationObserver objeto .

  5. Agregue un CompletedEventHandler método a ManagementOperationObserver.

  6. Llame al método Get del ManagementObjectSearcher objeto y proporcione el ManagmentOperationObserver objeto como parámetro.

  7. Asegúrese de que la aplicación sigue ejecutándose mientras se ejecuta la consulta.

Ejemplo

En el siguiente ejemplo de código de C# se consultan de forma asincrónica los componentes instalados en un cliente.

Para obtener información sobre cómo llamar al código de ejemplo, vea Cómo llamar a un método de clase WMI mediante System.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 ejemplo tiene los parámetros siguientes:

Parámetro Tipo Descripción
Scope ManagementScope Un valor válido ManagementScope. La ruta de acceso debe ser root\ccm.

Compilar el código

Espacios de nombres

Sistema.

System.Management.

Ensamblado

System.Management.

Programación sólida

La excepción que se puede generar es System.Management.ManagementException.

Consulta también

Acerca de Configuration Manager programación WMI
Cómo llamar a un método de clase WMI mediante System.Management
Conexión al espacio de nombres WMI de cliente Configuration Manager mediante System.Management
Cómo realizar una consulta sincrónica mediante System.Management
Cómo leer un objeto WMI mediante System.Management