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 continuamente sondado e o estado de comandos individuais pode ser ajustado à medida que o usuário os visualiza. No entanto, como o shell do Visual Studio pode hospedar um número ilimitado de VSPackages, a sondagem extensiva 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 a SVsUIShell partir do serviço, como segue.

      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 do for diferente de zero (TRUE), a atualização será executada UpdateCommandUI de forma síncrona e imediata. Recomendamos que você passe zero (FALSE) para esse parâmetro para ajudar a manter o bom desempenho. Se você quiser evitar o armazenamento em cache, aplique o DontCache sinalizador ao criar o comando no arquivo .vsct. No entanto, use o sinalizador com cautela ou o desempenho pode diminuir. Para obter mais informações sobre sinalizadores de comando, consulte a documentação do elemento Command Flag .

    • Em VSPackages que hospedam um controle ActiveX usando o modelo de ativação in-loco em uma janela, pode ser mais conveniente usar o UpdateUI método. O UpdateCommandUI método na interface e o UpdateUI método na IVsUIShellIOleInPlaceComponentUIManager 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 é adiada até o tempo ocioso. O shell armazena em cache o estado do comando para ajudar a manter o bom desempenho. Se você quiser evitar o armazenamento em cache, aplique o DontCache sinalizador ao criar o comando no arquivo .vsct. No entanto, use o sinalizador com cautela porque o desempenho pode diminuir.

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