Como Executar uma Consulta Assíncrona ao Utilizar a Gestão de Sistemas
Para realizar uma consulta assíncronea num cliente do Gestor de Configuração Windows espaço de nomes de Instrumentação (WMI), crie um ManagementObjectSearcher
objeto que especifique uma consulta WQL. Em seguida, cria-se um ManagementOperationObserver
manipulador de eventos para cada resultado de consulta e também para o final da consulta.
A consulta assíncronea é executada quando o ManagementObjectSearcher
método do objeto Get é chamado com o ManagementOperationObserver
objeto.
Para realizar uma consulta assíncronea
Configurar uma ligação ao espaço de nomes WMI do cliente do Gestor de Configuração. Para obter mais informações, consulte Como Ligação ao Espaço de Nome WMI do Cliente WMI do Gestor de Configuração utilizando o System.Management.
Criar um
ManagementObjectSearcher
objeto.Criar um
ManagementOperationObserver
objeto.Adicione um
ObjectReadyEventHandler
método oManagementOperationObserver
objeto.Adicione um
CompletedEventHandler
método aoManagementOperationObserver
.Chame o
ManagementObjectSearcher
objeto Obter o método e forneça o objeto comoManagmentOperationObserver
parâmetro.Certifique-se de que a sua aplicação ainda funciona enquanto a consulta é executada.
Exemplo
As consultas de exemplo de código C# para componentes instalados num cliente.
Para obter informações sobre a chamada do código de amostra, consulte como chamar um método de classe WMI utilizando o sistema.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 | Description |
---|---|---|
Scope |
ManagementScope |
Um válido ManagementScope . O caminho deve ser raiz\ccm. |
A Compilar o Código
Espaços de nomes
Sistema.
Sistema.Gestão.
Assemblagem
Sistema.Gestão.
Programação Robusta
A exceção que pode ser levantada é System.Management.ManagementException.
Consulte também
Sobre a programação do Gestor de Configuração WMI
Como chamar um método de classe WMI usando o sistema.Management
Como Ligação ao espaço de nomes WMI do Gestor de Configuração WMI usando system.Management
Como realizar uma consulta sincronizada utilizando o sistema.Management
Como ler um objeto WMI usando o sistema.Management