共用方式為


在您的 VSPackage 中執行的命令處理配置後,您可以新增程式碼來更新使用者介面 (UI),與您的新命令的狀態。

在典型的 Win32 應用程式中,可以持續地輪詢命令集,可調整的個別命令的狀態,如同在使用者可以檢視它們。 不過,因為Visual Studio shell 可以存放無數個 VSPackages、 廣泛的輪詢可能會降低回應速度,尤其輪詢跨 interop 組件之間的 managed 程式碼與 com。

若要更新 UI

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

    • 呼叫 UpdateCommandUI 方法。

      IVsUIShell介面可以取自SVsUIShell服務,如下所示。

      Private Sub UpdateUI(ByVal sp As Microsoft.VisualStudio.Shell.ServiceProvider)
          Dim vsShell As IVsUIShell = DirectCast(sp.GetService(GetType(IVsUIShell)), IVsUIShell)
          If vsShell IsNot Nothing Then 
              Dim hr As Integer = vsShell.UpdateCommandUI(0)
              Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr)
          End If 
      End Sub
      
      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);
          }
      }
      
      void UpdateUI(IServiceProvider *pSP)
      {
          CComPtr< IVsUIShell> srpShell;
          int hresult = pSP->QueryService(SID_SVsUIShell, 
                                          IID_IVsUIShell, 
                                          (void **)&srpShell);
          if (SUCCEEDED(hresult) && NULL != srpShell)
          {
              sprShell->UpdateCommandUI(FALSE);
          }
      }
      

      如果參數的UpdateCommandUI為非零 (TRUE),然後以同步方式與立即執行更新。 我們建議您傳遞零 (FALSE) 這個參數,以協助維護良好的效能。 如果您想要避免快取時,會套用DontCache .vsct 檔案中建立的命令時的旗標。 不過,謹慎使用旗標,或者可能會降低效能。 如需有關命令旗標的詳細資訊,請參閱CommandFlag 項目文件。

    • 在使用 [就地啟動模式],請在視窗中裝載 ActiveX 控制項的 VSPackages,可能還要方便使用UpdateUI方法。 UpdateCommandUI中的方法IVsUIShell介面和UpdateUI中的方法IOleInPlaceComponentUIManager介面的功能相同。 兩者會造成環境,以重新查詢所有命令的狀態。 一般而言,更新就不會立即執行。 相反地,更新已延遲到閒置的時間。 殼層會快取的命令狀態,以協助維護良好的效能。 如果您想要避免快取時,會套用DontCache .vsct 檔案中建立的命令時的旗標。 不過,使用旗標謹慎,因為可能會降低效能。

      請注意,您可以取得IOleInPlaceComponentUIManager介面,藉由呼叫QueryInterface上的方法IOleComponentUIManager物件,或藉由取得介面,從SOleComponentUIManager服務。

請參閱

概念

VSPackages 對 IDE 所新增的使用者介面項目

命令的實作