Condividi tramite


Come eseguire una query asincrona usando System.Management

Per eseguire una query asincrona in uno spazio dei nomi WMI (Windows Instrumentation) client Configuration Manager, creare un ManagementObjectSearcher oggetto che specifica una query WQL. Si crea quindi un oggetto ManagementOperationObserver che specifica un gestore eventi per ogni risultato della query e anche per la fine della query.

La query asincrona viene eseguita quando viene chiamato il ManagementObjectSearcher metodo Get dell'oggetto con l'oggetto ManagementOperationObserver .

Per eseguire una query asincrona

  1. Configurare una connessione allo spazio dei nomi WMI del client Configuration Manager. Per altre informazioni, vedere How to Connect to the Configuration Manager Client WMI Namespace by Using System.Management (Come connettersi allo spazio dei nomi WMI del client Configuration Manager tramite System.Management).

  2. Creare un ManagementObjectSearcher oggetto .

  3. Creare un ManagementOperationObserver oggetto .

  4. Aggiungere un ObjectReadyEventHandler metodo all'oggetto ManagementOperationObserver .

  5. Aggiungere un CompletedEventHandler metodo all'oggetto ManagementOperationObserver.

  6. Chiamare il metodo Get dell'oggetto ManagementObjectSearcher e specificare l'oggetto ManagmentOperationObserver come parametro.

  7. Assicurarsi che l'applicazione venga ancora eseguita durante l'esecuzione della query.

Esempio

L'esempio di codice C# seguente esegue query in modo asincrono per i componenti installati in un client.

Per informazioni sulla chiamata del codice di esempio, vedere Come chiamare un metodo di classe WMI tramite 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;  
}  

Questo metodo di esempio include i parametri seguenti:

Parametro Tipo Descrizione
Scope ManagementScope Oggetto valido ManagementScope. Il percorso deve essere root\ccm.

Compilazione del codice

Namespaces

Sistema.

System.Management.

Assembly

System.Management.

Programmazione efficiente

L'eccezione che può essere generata è System.Management.ManagementException.

Vedere anche

Informazioni sulla programmazione WMI Configuration Manager
Come chiamare un metodo di classe WMI usando System.Management
Come connettersi allo spazio dei nomi WMI del client Configuration Manager tramite System.Management
Come eseguire una query sincrona tramite System.Management
Come leggere un oggetto WMI usando System.Management