Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om du vill utföra en asynkron fråga på en WMI-namnrymd (Windows Instrumentation) för en Configuration Manager klient 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 metoden Get för objektet anropas med ManagementOperationObserver objektet.
Så här utför du en asynkron fråga
Konfigurera en anslutning till Configuration Manager klientens WMI-namnområde. Mer information finns i Så här ansluter du till Configuration Manager-klientens WMI-namnområde med hjälp av System.Management.
Skapa ett
ManagementObjectSearcherobjekt.Skapa ett
ManagementOperationObserverobjekt.Lägg till en
ObjectReadyEventHandlermetod förManagementOperationObserverobjektet.Lägg till en
CompletedEventHandlermetod iManagementOperationObserver.Anropa metoden Object
ManagementObjectSearcherGet och angeManagmentOperationObserverobjektet 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 |
En giltig ManagementScope. Sökvägen ska vara root\ccm. |
Kompilerar koden
Namnområden
systemet.
System.Management.
Montering
System.Management.
Robust programmering
Undantaget som kan tas upp är System.Management.ManagementException.
Se även
Om Configuration Manager WMI-programmering
Så här anropar du en WMI-klassmetod med hjälp av System.Management
Så här ansluter du 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
Så här läser du ett WMI-objekt med System.Management