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 pesquisado continuamente 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 interrogação extensiva pode diminuir a capacidade de resposta, especialmente a interrogação em assemblies de interoperação entre código gerido 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 partir do SVsUIShell serviço, da seguinte forma.

      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 UpdateCommandUI for diferente de zero, a atualização será executada de forma síncrona e TRUE 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 sinalizador DontCache 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 de sinalizador de comando .

    • Em VSPackages que hospedam um controlo ActiveX usando o modelo de ativação in-place numa janela, poderá ser mais conveniente utilizar 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 é adiada até o tempo ocioso. O shell armazena em cache o estado do comando para ajudar a manter um bom desempenho. Se você quiser evitar o cache, aplique o sinalizador DontCache ao criar o comando no arquivo .vsct. No entanto, use a bandeira com cautela porque o desempenho pode diminuir.

      Observe que pode obter a interface IOleInPlaceComponentUIManager chamando o método QueryInterface em um objeto IOleComponentUIManager ou através da obtenção da interface a partir do serviço SOleComponentUIManager.