Поделиться через


Обновление пользовательского интерфейса

После реализации команды можно добавить код для обновления пользовательского интерфейса с состоянием новых команд.

В обычном приложении Win32 набор команд можно постоянно опрашивать, а состояние отдельных команд можно изменить в виде просмотра пользователем. Тем не менее, поскольку оболочка Visual Studio может размещать неограниченное количество VSPackage, обширный опрос может снизить скорость реагирования, особенно опрос между управляемым кодом и COM.

Обновление пользовательского интерфейса

  1. Выполните одно из следующих действий.

    • Вызовите метод 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) для этого параметра, чтобы обеспечить хорошую производительность. Если вы хотите избежать кэширования, при создании команды в VSCT-файле примените DontCache флаг. Тем не менее, используйте флаг осторожно или производительность могут уменьшиться. Дополнительные сведения о флагах команд см. в документации по элементу "Флаг команды".

    • В VSPackages, в которых размещен элемент activeX с помощью модели активации на месте в окне, может быть удобнее использовать UpdateUI этот метод. Метод UpdateCommandUI в интерфейсе IVsUIShell и UpdateUI методе IOleInPlaceComponentUIManager в интерфейсе функционально эквивалентны. Оба приводят к повторному запросу состояния всех команд. Как правило, обновление не выполняется немедленно. Вместо этого обновление задерживается до времени простоя. Оболочка кэширует состояние команды, чтобы обеспечить хорошую производительность. Если вы хотите избежать кэширования, при создании команды в VSCT-файле примените DontCache флаг. Тем не менее, используйте флаг осторожно, так как производительность может снизиться.

      Обратите внимание, что интерфейс можно получить IOleInPlaceComponentUIManager , вызвав QueryInterface метод в объекте IOleComponentUIManager или получив интерфейс из SOleComponentUIManager службы.