更新用户接口
实现命令后,可以添加代码以使用新命令的状态更新用户界面。
在典型的 Win32 应用程序中,可以持续轮询命令集,并且可以在用户查看命令时调整各个命令的状态。 但是,由于 Visual Studio shell 可以托管无限数量的 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 为非零(
TRUE
),则同步且立即执行更新。 建议为此参数传递零(FALSE
),以帮助保持良好的性能。 如果要避免缓存,请在DontCache
.vsct 文件中创建命令时应用标志。 不过,请谨慎使用标志或性能可能会降低。 有关命令标志的详细信息,请参阅 Command Flag 元素 文档。在使用窗口中的就地激活模型托管 ActiveX 控件的 VSPackage 中,使用 UpdateUI 该方法可能更方便。 UpdateCommandUI接口UpdateUI中的IVsUIShell方法和接口中IOleInPlaceComponentUIManager的方法在功能上是等效的。 这两者都会导致环境重新查询所有命令的状态。 通常,不会立即执行更新。 相反,更新会延迟到空闲时间。 shell 会缓存命令状态,以帮助保持良好的性能。 如果要避免缓存,请在
DontCache
.vsct 文件中创建命令时应用标志。 不过,请谨慎使用标志,因为性能可能会降低。请注意,可以通过对IOleComponentUIManager对象调用
QueryInterface
方法或通过从SOleComponentUIManager服务获取接口来获取IOleInPlaceComponentUIManager接口。