Configuration Managerクライアント Windows Instrumentation (WMI) 名前空間で非同期クエリを実行するには、WQL クエリを指定する ManagementObjectSearcher オブジェクトを作成します。 次に、クエリ結果ごと、クエリの終了時にもイベント ハンドラーを指定する ManagementOperationObserver を作成します。
非同期クエリは、 ManagementObjectSearcher オブジェクト Get メソッドが ManagementOperationObserver オブジェクトで呼び出されると実行されます。
非同期クエリを実行するには
Configuration Manager クライアント WMI 名前空間への接続を設定します。 詳細については、「System.Management を使用して Configuration Manager クライアント WMI 名前空間に接続する方法」を参照してください。
ManagementObjectSearcherオブジェクトを作成します。ManagementOperationObserverオブジェクトを作成します。ManagementOperationObserverオブジェクトにObjectReadyEventHandlerメソッドを追加します。CompletedEventHandlerメソッドをManagementOperationObserverに追加します。ManagementObjectSearcherオブジェクトの Get メソッドを呼び出し、ManagmentOperationObserverオブジェクトをパラメーターとして指定します。クエリの実行中もアプリケーションが実行されていることを確認します。
例
次の C# コード例では、クライアントにインストールされているコンポーネントを非同期でクエリします。
サンプル コードの呼び出しの詳細については、「 System.Management を使用して WMI クラス メソッドを呼び出す方法」を参照してください。
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 です。
関連項目
Configuration Manager WMI プログラミングについて
System.Management を使用して WMI クラス メソッドを呼び出す方法
System.Management を使用して Configuration Manager クライアント WMI 名前空間に接続する方法
System.Management を使用して同期クエリを実行する方法
System.Management を使用して WMI オブジェクトを読み取る方法