Teilen über


Ausführen einer asynchronen Abfrage mithilfe von System.Management

Um eine asynchrone Abfrage für einen Configuration Manager WMI-Namespace (Windows Instrumentation) des Clients auszuführen, erstellen Sie ein ManagementObjectSearcher -Objekt, das eine WQL-Abfrage angibt. Anschließend erstellen Sie einen ManagementOperationObserver , der einen Ereignishandler für jedes Abfrageergebnis und auch für das Ende der Abfrage angibt.

Die asynchrone Abfrage wird ausgeführt, wenn die Get-Methode des ManagementObjectSearcher Objekts mit dem ManagementOperationObserver -Objekt aufgerufen wird.

So führen Sie eine asynchrone Abfrage aus

  1. Richten Sie eine Verbindung mit dem Configuration Manager-Client-WMI-Namespace ein. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit dem Configuration Manager-Client-WMI-Namespace mithilfe von System.Management.

  2. Erstellen Sie ein ManagementObjectSearcher -Objekt.

  3. Erstellen Sie ein ManagementOperationObserver -Objekt.

  4. Fügen Sie dem ManagementOperationObserver -Objekt eine Methode hinzuObjectReadyEventHandler.

  5. Fügen Sie dem ManagementOperationObservereine CompletedEventHandler -Methode hinzu.

  6. Rufen Sie die Get-Methode des ManagementObjectSearcher Objekts auf, und geben Sie das ManagmentOperationObserver Objekt als Parameter an.

  7. Stellen Sie sicher, dass Ihre Anwendung weiterhin ausgeführt wird, während die Abfrage ausgeführt wird.

Beispiel

Im folgenden C#-Codebeispiel werden asynchrone Abfragen nach Komponenten durchgeführt, die auf einem Client installiert sind.

Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen einer WMI-Klassenmethode mithilfe von 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;  
}  

Diese Beispielmethode weist die folgenden Parameter auf:

Parameter Typ Beschreibung
Scope ManagementScope Ein gültiger ManagementScope. Der Pfad sollte root\ccm sein.

Kompilieren des Codes

Namespaces

System.

System.Management.

Assembly

System.Management.

Robuste Programmierung

Die Ausnahme, die ausgelöst werden kann, ist System.Management.ManagementException.

Siehe auch

Informationen zur Configuration Manager WMI-Programmierung
Aufrufen einer WMI-Klassenmethode mithilfe von System.Management
Herstellen einer Verbindung mit dem Configuration Manager-Client-WMI-Namespace mithilfe von System.Management
Ausführen einer synchronen Abfrage mithilfe von System.Management
Lesen eines WMI-Objekts mithilfe von System.Management