實作命令之後,您可以新增程式碼,以使用新命令的狀態來更新使用者介面。
在典型的 Win32 應用程式中,可以持續輪詢命令集,而且可以在使用者檢視個別命令時調整個別命令的狀態。 不過,由於 Visual Studio 殼層可以裝載無限數目的 VSPackage,因此廣泛的輪詢可能會降低回應能力,特別是跨 Managed 程式碼與 COM 之間的互通元件輪詢。
若要更新 UI
請執行下列其中一個步驟:
呼叫 UpdateCommandUI 方法。
可以從SVsUIShell服務中取得IVsUIShell介面,如下所示。
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) ,以協助維持良好的效能。 如果您想要避免快取,請在 .vsct 檔案中建立命令時套用DontCache旗標。 不過,請謹慎使用旗標,否則效能可能會降低。 如需命令旗標的詳細資訊,請參閱 命令旗標元素 檔。在以視窗中進行就地啟用模型來裝載 ActiveX 控制項的 VSPackages 中,使用 UpdateUI 方法可能會更方便。 UpdateCommandUI介面中IVsUIShell的方法和UpdateUI介面中IOleInPlaceComponentUIManager的方法在功能上是等價的。 兩者都會導致環境重新查詢所有命令的狀態。 通常,不會立即執行更新。 相反地,更新會延遲到閒置時間。 Shell 會快取命令狀態,以協助維持良好的效能。 如果您要避免快取,請在 .vsct 檔案中建立命令時套用
DontCache旗標。 不過,請謹慎使用旗標,因為效能可能會降低。請注意,您可以透過在IOleComponentUIManager物件上呼叫
QueryInterface方法或從SOleComponentUIManager服務取得IOleInPlaceComponentUIManager介面,以取得IOleInPlaceComponentUIManager介面。