How to Perform an Asynchronous Query by Using System.Management

Aby wykonać zapytanie asynchroniczne w przestrzeni nazw klienta Configuration Manager Windows Instrumentation (WMI), utwórz ManagementObjectSearcher obiekt, który określa zapytanie WQL. Następnie utworzysz ManagementOperationObserver program obsługi zdarzeń dla każdego wyniku zapytania, a także dla końca zapytania.

Zapytanie asynchroniczne jest uruchamiane, gdy metoda Get obiektu ManagementObjectSearcher jest wywoływana z obiektem ManagementOperationObserver .

Aby wykonać zapytanie asynchroniczne

  1. Skonfiguruj połączenie z przestrzenią nazw usługi WMI klienta Configuration Manager. Aby uzyskać więcej informacji, zobacz How to Connect to the Configuration Manager Client WMI Namespace by Using System.Management (Jak nawiązać połączenie z przestrzenią nazw usługi WMI klienta Configuration Manager przy użyciu funkcji System.Management).

  2. ManagementObjectSearcher Utwórz obiekt.

  3. ManagementOperationObserver Utwórz obiekt.

  4. ObjectReadyEventHandler Dodaj metodę obiektuManagementOperationObserver.

  5. CompletedEventHandler Dodaj metodę do obiektu ManagementOperationObserver.

  6. Wywołaj metodę Get obiektu ManagementObjectSearcher i podaj ManagmentOperationObserver obiekt jako parametr.

  7. Upewnij się, że aplikacja nadal działa podczas uruchamiania zapytania.

Przykład

Poniższy przykład kodu języka C# asynchronicznie wykonuje zapytania dotyczące składników zainstalowanych na kliencie.

Aby uzyskać informacje na temat wywoływania przykładowego kodu, zobacz How to Call a WMI Class Method by Using System.Management (Jak wywołać metodę klasy WMI przy użyciu pliku 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;  
}  

Ta przykładowa metoda ma następujące parametry:

Parametr Wpisać Opis
Scope ManagementScope Prawidłowa wartość ManagementScope. Ścieżka powinna mieć wartość root\ccm.

Kompilowanie kodu

Obszary nazw

System.

System.Management.

Zestawu

System.Management.

Niezawodne programowanie

Wyjątek, który można zgłaszać, to System.Management.ManagementException.

Zobacz też

Informacje o programowaniu Configuration Manager WMI
How to Call a WMI Class Method by Using System.Management
How to Connect to the Configuration Manager Client WMI Namespace by Using System.Management (Jak nawiązać połączenie z przestrzenią nazw usługi WMI klienta Configuration Manager przy użyciu programu System.Management)
How to Perform a Synchronous Query by Using System.Management
Jak odczytać obiekt WMI przy użyciu programu System.Management