Ausführen einer asynchronen Abfrage mithilfe von System.Management
Um eine asynchrone Abfrage für einen Configuration Manager WMI-Namespace (Windows Instrumentation) des Clients auszuführen, erstellen Sie ein ManagementObjectSearcher
-Objekt, das eine WQL-Abfrage angibt. Anschließend erstellen Sie einen ManagementOperationObserver
, der einen Ereignishandler für jedes Abfrageergebnis und auch für das Ende der Abfrage angibt.
Die asynchrone Abfrage wird ausgeführt, wenn die Get-Methode des ManagementObjectSearcher
Objekts mit dem ManagementOperationObserver
-Objekt aufgerufen wird.
So führen Sie eine asynchrone Abfrage aus
Richten Sie eine Verbindung mit dem Configuration Manager-Client-WMI-Namespace ein. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit dem Configuration Manager-Client-WMI-Namespace mithilfe von System.Management.
Erstellen Sie ein
ManagementObjectSearcher
-Objekt.Erstellen Sie ein
ManagementOperationObserver
-Objekt.Fügen Sie dem
ManagementOperationObserver
-Objekt eine Methode hinzuObjectReadyEventHandler
.Fügen Sie dem
ManagementOperationObserver
eineCompletedEventHandler
-Methode hinzu.Rufen Sie die Get-Methode des
ManagementObjectSearcher
Objekts auf, und geben Sie dasManagmentOperationObserver
Objekt als Parameter an.Stellen Sie sicher, dass Ihre Anwendung weiterhin ausgeführt wird, während die Abfrage ausgeführt wird.
Beispiel
Im folgenden C#-Codebeispiel werden asynchrone Abfragen nach Komponenten durchgeführt, die auf einem Client installiert sind.
Informationen zum Aufrufen des Beispielcodes finden Sie unter Aufrufen einer WMI-Klassenmethode mithilfe von 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;
}
Diese Beispielmethode weist die folgenden Parameter auf:
Parameter | Typ | Beschreibung |
---|---|---|
Scope |
ManagementScope |
Ein gültiger ManagementScope . Der Pfad sollte root\ccm sein. |
Kompilieren des Codes
Namespaces
System.
System.Management.
Assembly
System.Management.
Robuste Programmierung
Die Ausnahme, die ausgelöst werden kann, ist System.Management.ManagementException.
Siehe auch
Informationen zur Configuration Manager WMI-Programmierung
Aufrufen einer WMI-Klassenmethode mithilfe von System.Management
Herstellen einer Verbindung mit dem Configuration Manager-Client-WMI-Namespace mithilfe von System.Management
Ausführen einer synchronen Abfrage mithilfe von System.Management
Lesen eines WMI-Objekts mithilfe von System.Management