Выполнение асинхронного запроса с помощью System.Management
Чтобы выполнить асинхронный запрос к пространству имен WMI клиента Configuration Manager, создайте ManagementObjectSearcher
объект, указывающий WQL-запрос. Затем создается ManagementOperationObserver
объект , указывающий обработчик событий для каждого результата запроса, а также для конца запроса.
Асинхронный запрос выполняется при вызове ManagementObjectSearcher
ManagementOperationObserver
метода Object Get с объектом .
Выполнение асинхронного запроса
Настройте подключение к пространству имен WMI клиента Configuration Manager. Дополнительные сведения см. в разделе Подключение к пространству имен WMI клиента Configuration Manager с помощью System.Management.
Создание
ManagementObjectSearcher
объекта.Создание
ManagementOperationObserver
объекта.ObjectReadyEventHandler
Добавьте метод объектаManagementOperationObserver
.CompletedEventHandler
Добавьте метод в .ManagementOperationObserver
ManagementObjectSearcher
Вызовите метод Get объекта и укажите объект вManagmentOperationObserver
качестве параметра.Убедитесь, что приложение по-прежнему выполняется во время выполнения запроса.
Пример
В следующем примере кода C# асинхронно запрашиваются компоненты, установленные на клиенте.
Сведения о вызове примера кода см. в статье Вызов метода класса WMI с помощью 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;
}
Этот пример метода имеет следующие параметры:
Параметр | Тип | Описание |
---|---|---|
Scope |
ManagementScope |
Допустимый ManagementScope объект . Путь должен быть root\ccm. |
Компиляция программы
Пространства имен
Системы.
System.Management.
Assembly
System.Management.
Надежное программирование
Можно вызвать исключение System.Management.ManagementException.
См. также
Сведения о программировании WMI Configuration Manager
Вызов метода класса WMI с помощью System.Management
Подключение к пространству имен WMI клиента Configuration Manager с помощью System.Management
Выполнение синхронного запроса с помощью System.Management
Чтение объекта WMI с помощью System.Management