Jak wykonać zapytanie asynchroniczne za pomocą System.Management

Aby wykonać zapytanie asynchroniczne w przestrzeni nazw usługi Instrumentacja Windows (WMI) klienta programu Configuration Manager, utwórz ManagementObjectSearcher obiekt określający zapytanie WQL. Następnie należy utworzyć program określający procedurę ManagementOperationObserver obsługi zdarzeń dla każdego wyniku zapytania, a także dla końca zapytania.

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

Aby wykonać zapytanie asynchroniczne

  1. Skonfiguruj połączenie z przestrzenią nazw usługi WMI klienta programu Configuration Manager. Aby uzyskać więcej informacji, zobacz Jak nawiązać połączenie z przestrzenią nazw WMI klienta Configuration Manager przy użyciu System.Management.

  2. ManagementObjectSearcher Tworzenie obiektu.

  3. ManagementOperationObserver Tworzenie obiektu.

  4. ObjectReadyEventHandler Dodaj metodę obiektuManagementOperationObserver.

  5. CompletedEventHandler Dodaj metodę do pola ManagementOperationObserver.

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

  7. Upewnij się, że aplikacja nadal działa, gdy zapytanie jest uruchomione.

Przykład

Poniższy przykład kodu w języku C# asynchronicznie wysyła 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 usługi WMI przy użyciu 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łowy ManagementScopeplik . Ścieżka powinna mieć postać root\ccm.

Kompilowanie kodu

Przestrzenie nazw

systemu.

System.Management.

Montaż

System.Management.

Wydajne programowanie

Wyjątek, który może zostać zgłoszony, to System.Management.ManagementException.

Zobacz też

Informacje o programowaniu usługi WMI programu Configuration Manager
Jak wywołać metodę klasy WMI przy użyciu System.Management
Jak nawiązać połączenie z przestrzenią nazw WMI klienta programu Configuration Manager przy użyciu polecenia System.Management
Jak wykonać zapytanie synchroniczne za pomocą System.Management
Jak odczytać obiekt WMI przy użyciu funkcji System.Management