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
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.
Créez un
ManagementObjectSearcher
objet .Créez un
ManagementOperationObserver
objet .Ajoutez une
ObjectReadyEventHandler
méthode à l’objetManagementOperationObserver
.Ajoutez une
CompletedEventHandler
méthode à .ManagementOperationObserver
Appelez la méthode Get de l’objet
ManagementObjectSearcher
et fournissez l’objetManagmentOperationObserver
en tant que paramètre.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