共用方式為


更新使用者介面

實作命令之後,您可以新增程式碼,以使用新命令的狀態來更新使用者介面。

在典型的 Win32 應用程式中,可以持續輪詢命令集,而且可以在使用者檢視個別命令時調整個別命令的狀態。 不過,由於 Visual Studio 殼層可以裝載無限數目的 VSPackage,因此廣泛的輪詢可能會降低回應能力,特別是跨 Managed 程式碼與 COM 之間的互通元件輪詢。

若要更新 UI

  1. 請執行下列其中一個步驟:

    • 呼叫 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介面。