Atualizando a interface do usuário

Depois de implementar um comando, você pode adicionar código para atualizar a interface do usuário com o estado dos novos comandos.

Em um aplicativo Win32 típico, o conjunto de comandos pode ser sondado continuamente e o estado dos comandos individuais pode ser ajustado conforme o usuário os visualiza. No entanto, como o shell do Visual Studio pode hospedar um número ilimitado de VSPackages, a sondagem abrangente pode diminuir a capacidade de resposta, especialmente a sondagem entre assemblies de interoperabilidade entre código gerenciado e COM.

Para atualizar a interface do usuário

  1. Execute uma das seguintes etapas:

    • Chame o método UpdateCommandUI .

      Uma IVsUIShell interface pode ser obtida do SVsUIShell serviço, da seguinte maneira.

      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);
          }
      }
      
      

      Se o parâmetro for diferente de UpdateCommandUI zero (TRUE), a atualização será executada de forma síncrona e imediata. Recomendamos que você passe zero (FALSE) para esse parâmetro para ajudar a manter um bom desempenho. Se você quiser evitar o cache, aplique o DontCache sinalizador ao criar o comando no arquivo .vsct. No entanto, use o sinalizador com cuidado ou o desempenho pode diminuir. Para obter mais informações sobre sinalizadores de comando, consulte a documentação do Elemento de Sinalizador de Comando .

    • Nos VSPackages que hospedam um controle ActiveX usando o modelo de ativação in-place em uma janela, pode ser mais conveniente usar o método UpdateUI. O UpdateCommandUI método na IVsUIShell interface e o UpdateUI método na IOleInPlaceComponentUIManager interface são funcionalmente equivalentes. Ambos fazem com que o ambiente consulte novamente o estado de todos os comandos. Normalmente, uma atualização não é executada imediatamente. Em vez disso, uma atualização é atrasada até um momento de inatividade. O shell armazena em cache o estado de comando para ajudar a manter um bom desempenho. Se você quiser evitar o cache, aplique o DontCache sinalizador ao criar o comando no arquivo .vsct. No entanto, use o sinalizador com cuidado porque o desempenho pode diminuir.

      Observe que você pode obter a interface IOleInPlaceComponentUIManager chamando o método QueryInterface em um objeto IOleComponentUIManager ou obtendo a interface do serviço SOleComponentUIManager.