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
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 .
Skapa ett
ManagementObjectSearcher
objekt.Skapa ett
ManagementOperationObserver
objekt.Lägg till en
ObjectReadyEventHandler
metod förManagementOperationObserver
objektet.Lägg till en
CompletedEventHandler
metod iManagementOperationObserver
.ManagementObjectSearcher
Anropa metoden Get för objektet och ange objektetManagmentOperationObserver
som en parameter.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