// This example demonstrates how to perform a synchronous instance enumeration.
public class EnumerateInstances {
public static int Main(string[] args) {
// Build a query for enumeration of Win32_Environment instances
SelectQuery query = new SelectQuery("Win32_Environment");
// Instantiate an object searcher with this query
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
// Call Get() to retrieve the collection of objects and loop through it
foreach (ManagementBaseObject envVar in searcher.Get())
Console.WriteLine("Variable : {0}, Value = {1}",
envVar["Name"],envVar["VariableValue"]);
return 0;
}
}
[Visual Basic]
Imports System
Imports System.Management
' This example demonstrates how to perform a synchronous instance enumeration.
Public Class EnumerateInstances
Overloads Public Shared Function Main(args() As String) As Integer
' Build a query for enumeration of Win32_Environment instances
Dim query As New SelectQuery("Win32_Environment")
' Instantiate an object searcher with this query
Dim searcher As New ManagementObjectSearcher(query)
' Call Get() to retrieve the collection of objects and loop through it
Dim envVar As ManagementBaseObject
For Each envVar In searcher.Get()
Console.WriteLine("Variable : {0}, Value = {1}", _
envVar("Name"), envVar("VariableValue"))
Next envVar
Return 0
End Function
End Class
对管理信息的访问经常发生在分布式环境中,并且可能涉及大量的数据。为支持此情况,也可以异步执行管理操作。下一个示例说明如何以异步编码模式枚举计算机上的所有服务。用于异步调用操作的方法是同步方法的重载,它带一个用于处理结果回调的 ManagementOperationObserver 类型的附加参数。此对象定义用于通知结果和完成的事件,您将向这些事件预订在引发它们时所执行的处理程序。
[C#]
using System;
using System.Management;
// This example demonstrates how to perform an asynchronous instance enumeration.
public class EnumerateInstancesAsync {
public static int Main(string[] args) {
//Enumerate asynchronously using Object Searcher
//===============================================
//Instantiate an object searcher with the query
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(new SelectQuery("Win32_Service"));
// Create a results watcher object, and handler for results and completion
ManagementOperationObserver results = new ManagementOperationObserver();
ObjectHandler objectHandler = new ObjectHandler();
// Attach handler to events for results and completion
results.ObjectReady += new ObjectReadyEventHandler(objectHandler.NewObject);
results.Completed += new CompletedEventHandler(objectHandler.Done);
//Call the asynchronous overload of Get() to start the enumeration
searcher.Get(results);
//Do something else while results arrive asynchronously
while (!objectHandler.IsCompleted) {
System.Threading.Thread.Sleep (1000);
}
objectHandler.Reset();
return 0;
}
//Handler for asynchronous results
public class ObjectHandler {
private bool isCompleted = false;
public void NewObject(object sender, ObjectReadyEventArgs obj) {
Console.WriteLine("Service : {0}, State = {1}",
obj.NewObject["Name"], obj.NewObject["State"]);
}
public bool IsCompleted {
get {
return isCompleted;
}
}