ユーザー インターフェイスの更新
コマンドを実装した後、新しいコマンドの状態を使用してユーザー インターフェイスを更新するコードを追加できます。
一般的な Win32 アプリケーションでは、コマンド セットを継続的にポーリングできます。また、個々のコマンドの状態は、ユーザーが表示するときに調整できます。 ただし、Visual Studio シェル でホストできる VSPackage の数に制限がないため、広範なポーリング、特にマネージド コードと COM 間の相互運用アセンブリに対するポーリングによって応答性が低下する可能性があります。
UI を更新するには
次のいずれかの操作を実行します。
UpdateCommandUI メソッドを呼び出します。
次のように、IVsUIShell インターフェイスを SVsUIShell サービスから取得できます。
void UpdateUI(Microsoft.VisualStudio.Shell.ServiceProvider sp) { IVsUIShell vsShell = (IVsUIShell)sp.GetService(typeof(IVsUIShell)); if (vsShell != null) { int hr = vsShell.UpdateCommandUI(0); Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr); } }
UpdateCommandUI のパラメーターが 0 以外 (
TRUE
) の場合、更新は同期的に直ちに実行されます。 適切なパフォーマンスを維持するために、このパラメーターには 0 (FALSE
) を渡すことをお勧めします。 キャッシュを回避する場合は、.vsct ファイルでコマンドを作成するときにDontCache
フラグを適用します。 ただし、フラグは慎重に使用してください。そうしないと、パフォーマンスが低下する可能性があります。 コマンド フラグの詳細については、「コマンド フラグ要素」のドキュメントを参照してください。ウィンドウでインプレース アクティブ化モデルを使用して ActiveX コントロールをホストする VSPackage では、UpdateUI メソッドを使用するほうが便利な場合があります。 IVsUIShell インターフェイスの UpdateCommandUI メソッドと IOleInPlaceComponentUIManager インターフェイスの UpdateUI メソッドは、機能的に同等です。 どちらの場合でも、環境はすべてのコマンドの状態を再クエリします。 通常、更新プログラムはすぐには実行されません。 代わりに、アイドル時間まで更新が遅延されます。 シェルは、良好なパフォーマンスを維持するために、コマンドの状態をキャッシュします。 キャッシュを回避する場合は、.vsct ファイルでコマンドを作成するときに
DontCache
フラグを適用します。 ただし、パフォーマンスが低下する可能性があるためフラグは慎重に使用してください。IOleInPlaceComponentUIManager インターフェイスを取得するには、IOleComponentUIManager オブジェクトで
QueryInterface
メソッドを呼び出すか、または SOleComponentUIManager サービスからインターフェイスを取得します。