Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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
ManagementObjectSearcherobjeto.Criar um
ManagementOperationObserverobjeto.Adicione um
ObjectReadyEventHandlermétodo oManagementOperationObserverobjeto.Adicione um
CompletedEventHandlermétodo aoManagementOperationObserver.Chame o
ManagementObjectSearcherobjeto Obter o método e forneça o objeto comoManagmentOperationObserverparâ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