Cómo realizar una consulta asincrónica mediante System.Management
Para realizar una consulta asincrónica en un espacio de nombres Configuration Manager instrumental de Windows (WMI) cliente, cree un ManagementObjectSearcher
objeto que especifique una consulta WQL. A continuación, cree un ManagementOperationObserver
objeto que especifique un controlador de eventos para cada resultado de la consulta y también para el final de la consulta.
La consulta asincrónica se ejecuta cuando se llama al método Get del ManagementObjectSearcher
objeto con el ManagementOperationObserver
objeto .
Para realizar una consulta asincrónica
Configure una conexión al espacio de nombres WMI de cliente Configuration Manager. Para obtener más información, vea Cómo conectarse al espacio de nombres WMI de cliente Configuration Manager mediante System.Management.
Cree un
ManagementObjectSearcher
objeto .Cree un
ManagementOperationObserver
objeto .Agregue un
ObjectReadyEventHandler
método alManagementOperationObserver
objeto .Agregue un
CompletedEventHandler
método aManagementOperationObserver
.Llame al método Get del
ManagementObjectSearcher
objeto y proporcione elManagmentOperationObserver
objeto como parámetro.Asegúrese de que la aplicación sigue ejecutándose mientras se ejecuta la consulta.
Ejemplo
En el siguiente ejemplo de código de C# se consultan de forma asincrónica los componentes instalados en un cliente.
Para obtener información sobre cómo llamar al código de ejemplo, vea Cómo llamar a un método de clase WMI mediante 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 ejemplo tiene los parámetros siguientes:
Parámetro | Tipo | Descripción |
---|---|---|
Scope |
ManagementScope |
Un valor válido ManagementScope . La ruta de acceso debe ser root\ccm. |
Compilar el código
Espacios de nombres
Sistema.
System.Management.
Ensamblado
System.Management.
Programación sólida
La excepción que se puede generar es System.Management.ManagementException.
Consulta también
Acerca de Configuration Manager programación WMI
Cómo llamar a un método de clase WMI mediante System.Management
Conexión al espacio de nombres WMI de cliente Configuration Manager mediante System.Management
Cómo realizar una consulta sincrónica mediante System.Management
Cómo leer un objeto WMI mediante System.Management