Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Als u een asynchrone query wilt uitvoeren op een WMI-naamruimte (Windows Instrumentation) van een Configuration Manager-client, maakt u een ManagementObjectSearcher object dat een WQL-query specificeert. Vervolgens maakt u een ManagementOperationObserver label waarin een gebeurtenis-handler wordt opgegeven voor elk queryresultaat en ook voor het einde van de query.
De asynchrone query wordt uitgevoerd wanneer de methode Get van het ManagementObjectSearcher object met het ManagementOperationObserver object wordt aangeroepen.
Een asynchrone query uitvoeren
Stel een verbinding in met de WMI-naamruimte van de Configuration Manager-client. Zie Verbinding maken met de WMI-naamruimte van de Configuration Manager-client met behulp van System.Management.
Een
ManagementObjectSearcherobject maken.Een
ManagementOperationObserverobject maken.Voeg een
ObjectReadyEventHandlermethode toe aan hetManagementOperationObserverobject.CompletedEventHandlerEen methode toevoegen aan het .ManagementOperationObserverRoep de ophaalmethode van het
ManagementObjectSearcherobject aan en geef hetManagmentOperationObserverobject op als een parameter.Zorg ervoor dat uw toepassing nog steeds wordt uitgevoerd terwijl de query wordt uitgevoerd.
Voorbeeld
In het volgende C#-codevoorbeeld wordt asynchroon een query uitgevoerd voor onderdelen die op een client zijn geïnstalleerd.
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;
}
Deze voorbeeldmethode heeft de volgende parameters:
| Parameter | Type | Beschrijving |
|---|---|---|
Scope |
ManagementScope |
Een geldige ManagementScope. Het pad moet root\ccm zijn. |
De code compileren
Naamruimten
Systeem.
System.Management.
bijeenkomst
System.Management.
Robuust programmeren
De uitzondering die kan worden verhoogd is System.Management.ManagementException.
Zie ook
Over Configuration Manager WMI-programmering
Een WMI-klassemethode aanroepen met System.Management
Verbinding maken met de WMI-naamruimte van de Configuration Manager-client met behulp van System.Management
Een synchrone query uitvoeren met behulp van System.Management
Een WMI-object lezen met System.Management