Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per eseguire una query asincrona in uno spazio dei nomi WMI (Windows Instrumentation) del client di Configuration Manager, crea un ManagementObjectSearcher oggetto che specifica una query WQL. Viene quindi creato un ManagementOperationObserver gestore eventi per ogni risultato della query e anche per la fine della query.
La query asincrona viene eseguita quando il metodo Get dell'oggetto ManagementObjectSearcher viene chiamato con l'oggetto ManagementOperationObserver .
Per eseguire una query asincrona
Configurare una connessione allo spazio dei nomi WMI del client di Configuration Manager. Per altre informazioni, vedi Come connettersi allo spazio dei nomi WMI del client di Configuration Manager tramite System.Management.
Creare un
ManagementObjectSearcheroggetto.Creare un
ManagementOperationObserveroggetto.Aggiungere un
ObjectReadyEventHandlermetodo all'oggettoManagementOperationObserver.Aggiungere un
CompletedEventHandlermetodo alla proprietà .ManagementOperationObserverChiama il metodo Get dell'oggetto
ManagementObjectSearchere fornisci l'oggettoManagmentOperationObservercome parametro.Assicurarsi che l'applicazione sia ancora in esecuzione durante l'esecuzione della query.
Esempio
Nell'esempio di codice C# seguente viene eseguita una query asincrona per i componenti installati in un client.
Per informazioni sulla chiamata del codice di esempio, vedere Come chiamare un metodo di classe WMI utilizzando 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;
}
Questo metodo di esempio include i parametri seguenti:
| Parametro | Tipo | Descrizione |
|---|---|---|
Scope |
ManagementScope |
Un valido ManagementScopefile . Il percorso deve essere root\ccm. |
Compilazione del codice
Spazi dei nomi
Sistema.
System.Management.
Assembly
System.Management.
Programmazione efficiente
L'eccezione che può essere generata è System.Management.ManagementException.
Vedere anche
Informazioni sulla programmazione WMI di Configuration Manager
Come chiamare un metodo di classe WMI tramite System.Management
Come connettersi allo spazio dei nomi WMI del client di Configuration Manager tramite System.Management
Come eseguire una query sincrona tramite System.Management
Come leggere un oggetto WMI tramite System.Management