Share via


Een asynchrone query uitvoeren met system.management

Als u een asynchrone query wilt uitvoeren op een Configuration Manager WMI-naamruimte (Windows Instrumentation), maakt u een ManagementObjectSearcher object dat een WQL-query opgeeft. Vervolgens maakt u een ManagementOperationObserver die een gebeurtenis-handler opgeeft voor elk queryresultaat en ook voor het einde van de query.

De asynchrone query wordt uitgevoerd wanneer de methode Get met het ManagementObjectSearcherManagementOperationObserver object wordt aangeroepen.

Een asynchrone query uitvoeren

  1. Een verbinding instellen met de WMI-naamruimte van de Configuration Manager-client. Zie How to Connect to the Configuration Manager Client WMI Namespace by Using System.Management (Verbinding maken met de WMI-naamruimte van de Configuration Manager-client met behulp van System.Management) voor meer informatie.

  2. Maak een ManagementObjectSearcher object.

  3. Maak een ManagementOperationObserver object.

  4. Voeg een ObjectReadyEventHandler methode toe aan het ManagementOperationObserver object.

  5. Voeg een CompletedEventHandler methode toe aan de ManagementOperationObserver.

  6. Roep de methode Get aan ManagementObjectSearcher en geef het ManagmentOperationObserver object op als parameter.

  7. Zorg ervoor dat uw toepassing nog steeds wordt uitgevoerd terwijl de query wordt uitgevoerd.

Voorbeeld

In het volgende C#-codevoorbeeld worden asynchroon query's uitgevoerd op onderdelen die op een client zijn geïnstalleerd.

Zie How to Call a WMI Class Method by Using System.Management (Een WMI-klassemethode aanroepen met behulp van System.Management) voor meer informatie over het aanroepen van de voorbeeldcode.


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;  
}  

Deze voorbeeldmethode heeft de volgende parameters:

Parameter Type Beschrijving
Scope ManagementScope Een geldige ManagementScope. Het pad moet root\ccm zijn.

De code compileren

Naamruimten

Systeem.

System.Management.

Vergadering

System.Management.

Robuust programmeren

De uitzondering die kan worden gegenereerd, is System.Management.ManagementException.

Zie ook

Over Configuration Manager WMI-programmering
Een WMI-klassemethode aanroepen met system.management
Verbinding maken met de WMI-naamruimte van de Configuration Manager-client met behulp van System.Management
Een synchrone query uitvoeren met System.Management
Een WMI-object lezen met System.Management