Dela via


Så här utför du en asynkron fråga med hjälp av System.Management

Om du vill utföra en asynkron fråga i ett Configuration Manager WMI-namnområde (Client Windows Instrumentation) skapar du ett ManagementObjectSearcher objekt som anger en WQL-fråga. Sedan skapar du en ManagementOperationObserver som anger en händelsehanterare för varje frågeresultat och även för slutet av frågan.

Den asynkrona frågan körs när ManagementObjectSearcher objektet Get-metoden anropas med -objektet ManagementOperationObserver .

Så här utför du en asynkron fråga

  1. Konfigurera en anslutning till Configuration Manager klientens WMI-namnområde. Mer information finns i How to Connect to the Configuration Manager Client WMI Namespace by Using System.Management .

  2. Skapa ett ManagementObjectSearcher objekt.

  3. Skapa ett ManagementOperationObserver objekt.

  4. Lägg till en ObjectReadyEventHandler metod för ManagementOperationObserver objektet.

  5. Lägg till en CompletedEventHandler metod i ManagementOperationObserver.

  6. ManagementObjectSearcher Anropa metoden Get för objektet och ange objektet ManagmentOperationObserver som en parameter.

  7. Se till att programmet fortfarande körs medan frågan körs.

Exempel

Följande C#-kodexempel frågar asynkront efter komponenter som är installerade på en klient.

Information om hur du anropar exempelkoden finns i Så här anropar du en WMI-klassmetod med Hjälp av 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;  
}  

Den här exempelmetoden har följande parametrar:

Parameter Typ Beskrivning
Scope ManagementScope Ett giltigt ManagementScope. Sökvägen ska vara root\ccm.

Kompilera koden

Namnområden

System.

System.Management.

Församlingen

System.Management.

Robust programmering

Undantaget som kan aktiveras är System.Management.ManagementException.

Se även

Om Configuration Manager WMI-programmering
Anropa en WMI-klassmetod med hjälp av System.Management
Ansluta till Configuration Manager klientens WMI-namnområde med hjälp av System.Management
Så här utför du en synkron fråga med hjälp av System.Management
Läsa ett WMI-objekt med System.Management