Partager via


Comment effectuer une requête asynchrone à l’aide de System.Management

Pour effectuer une requête asynchrone sur un espace de noms WMI (Windows Instrumentation) client Configuration Manager, créez un ManagementObjectSearcher objet qui spécifie une requête WQL. Vous créez ensuite un ManagementOperationObserver qui spécifie un gestionnaire d’événements pour chaque résultat de requête et également pour la fin de la requête.

La requête asynchrone est exécutée lorsque la méthode Get de l’objet ManagementObjectSearcher est appelée avec l’objet ManagementOperationObserver .

Pour effectuer une requête asynchrone

  1. Configurez une connexion à l’espace de noms WMI du client Configuration Manager. Pour plus d’informations, consultez Comment se connecter à l’espace de noms WMI du client Configuration Manager à l’aide de System.Management.

  2. Créez un ManagementObjectSearcher objet .

  3. Créez un ManagementOperationObserver objet .

  4. Ajoutez une ObjectReadyEventHandler méthode à l’objet ManagementOperationObserver .

  5. Ajoutez une CompletedEventHandler méthode à .ManagementOperationObserver

  6. Appelez la méthode Get de l’objet ManagementObjectSearcher et fournissez l’objet ManagmentOperationObserver en tant que paramètre.

  7. Vérifiez que votre application s’exécute toujours pendant l’exécution de la requête.

Exemple

L’exemple de code C# suivant interroge de façon asynchrone les composants installés sur un client.

Pour plus d’informations sur l’appel de l’exemple de code, consultez Comment appeler une méthode de classe WMI à l’aide de 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;  
}  

Cet exemple de méthode a les paramètres suivants :

Paramètre Type Description
Scope ManagementScope Valide ManagementScope. Le chemin d’accès doit être root\ccm.

Compilation du code

Espaces de noms

Système.

System.Management.

Assembly

System.Management.

Programmation robuste

L’exception qui peut être levée est System.Management.ManagementException.

Voir aussi

À propos de Configuration Manager programmation WMI
Comment appeler une méthode de classe WMI à l’aide de System.Management
Comment se connecter à l’espace de noms WMI du client Configuration Manager à l’aide de System.Management
Comment effectuer une requête synchrone à l’aide de System.Management
Guide pratique pour lire un objet WMI à l’aide de System.Management