Como executar uma consulta assíncrona usando System.Management
Para executar uma consulta assíncrona em um namespace da WMI (Instrumentação do Windows) do cliente Configuration Manager, crie um ManagementObjectSearcher
objeto que especifica uma consulta WQL. Em seguida, você cria um ManagementOperationObserver
que especifica um manipulador de eventos para cada resultado de consulta e também para o final da consulta.
A consulta assíncrona é executada quando o método Get do ManagementObjectSearcher
objeto é chamado com o ManagementOperationObserver
objeto.
Para executar uma consulta assíncrona
Configure uma conexão com o namespace WMI do cliente Configuration Manager. Para obter mais informações, consulte Como se conectar ao namespace WMI do cliente Configuration Manager usando System.Management.
Crie um
ManagementObjectSearcher
objeto.Crie um
ManagementOperationObserver
objeto.Adicione um
ObjectReadyEventHandler
método aoManagementOperationObserver
objeto.Adicione um
CompletedEventHandler
método aoManagementOperationObserver
.Chame o método Get do
ManagementObjectSearcher
objeto e forneça oManagmentOperationObserver
objeto como um parâmetro.Verifique se o aplicativo ainda é executado enquanto a consulta é executada.
Exemplo
O exemplo de código C# a seguir consulta assíncronamente para componentes instalados em um cliente.
Para obter informações sobre como chamar o código de exemplo, consulte Como chamar um método de classe WMI usando 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;
}
Este método de exemplo tem os seguintes parâmetros:
Parâmetro | Tipo | Descrição |
---|---|---|
Scope |
ManagementScope |
Um válido ManagementScope . O caminho deve ser raiz\ccm. |
Compilando o código
Namespaces
Sistema.
System.Management.
Assembly
System.Management.
Programação robusta
A exceção que pode ser gerada é System.Management.ManagementException.
Confira também
Sobre Configuration Manager programação WMI
Como chamar um método de classe WMI usando System.Management
Como conectar-se ao namespace WMI do cliente Configuration Manager usando System.Management
Como executar uma consulta síncrona usando System.Management
Como ler um objeto WMI usando System.Management