Ausführen einer asynchronen Abfrage mithilfe von System.Management

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

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

So führen Sie eine asynchrone Abfrage durch

  1. Verbindung mit dem WMI-Namespace des Configuration Manager-Clients herstellen. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit dem WMI-Namespace des Configuration Manager-Clients mithilfe von System.Management.

  2. Erstellen eines ManagementObjectSearcher Objekts

  3. Erstellen eines ManagementOperationObserver Objekts

  4. Fügen Sie dem Objekt eine ObjectReadyEventHandler Methode hinzu ManagementOperationObserver .

  5. Fügen Sie dem Abschnitt eine CompletedEventHandler Methode zu .ManagementOperationObserver

  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 asynchron Komponenten abgefragt, 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 hat die folgenden Parameter:

Parameter Typ Beschreibung
Scope ManagementScope Eine gültige 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 WMI-Programmierung in Configuration Manager
Aufrufen einer WMI-Klassenmethode mithilfe von System.Management
So stellen Sie mithilfe von System.Management eine Verbindung zum WMI-Namespace des Configuration Manager Clients her
So führen Sie mithilfe von System.Management eine synchrone Abfrage durch
So lesen Sie ein WMI-Objekt mit System.Management