Partilhar via


Como: atualizar a Interface do usuário

Após implementar um esquema de manipulação de comandos no seu VSPackage, você pode adicionar código para atualizar a interface do usuário (UI) com o estado dos seus comandos de novos.

Em um aplicativo típico do Win32, o conjunto de comandos pode ser monitorado continuamente, e o estado dos comandos individuais pode ser ajustado à medida que o usuário vê-los. No entanto, porque o Visual Studio shell pode hospedar um número ilimitado de VSPackages, ampla sondagem pode diminuir a capacidade de resposta, especialmente de sondagem em assemblies de interoperabilidade entre código gerenciado e com.

Para atualizar a interface do usuário

  • Execute uma das seguintes etapas:

    • Chame o método UpdateCommandUI.

      Um IVsUIShell interface pode ser obtido com o SVsUIShell de serviço, como a seguir.

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

      Se o parâmetro da UpdateCommandUI for diferente de zero (TRUE), e em seguida, a atualização for executada de forma síncrona e imediatamente. Recomendamos que você passe zero (FALSE) para este parâmetro ajudar a manter o bom desempenho. Se você quiser evitar o cache, aplicar o DontCache sinalizar quando você cria o comando no arquivo .vsct. No entanto, usar o sinalizador com cautela, ou pode diminuir o desempenho. Para obter mais informações sobre sinalizadores de comando, consulte a Elemento de sinalizador de comando documentação.

    • Em VSPackages que hospedar um controle de ActiveX, utilizando o modelo de ativação no local em uma janela, talvez seja mais conveniente usar o UpdateUI método. 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 para consultar novamente o estado de todos os comandos. Normalmente, uma atualização não será executada imediatamente. Em vez disso, uma atualização será adiada até o tempo ocioso. O shell armazena em cache o estado de comando para ajudar a manter o bom desempenho. Se você quiser evitar o cache, aplicar o DontCache sinalizar quando você cria o comando no arquivo .vsct. No entanto, use o sinalizador com cuidado porque pode diminuir o desempenho.

      Observe que você pode obter o IOleInPlaceComponentUIManager interface chamando o QueryInterface método em um IOleComponentUIManager object ou adquirindo a interface da SOleComponentUIManager service.

Consulte também

Conceitos

Como a VSPackages adicionar elementos de Interface do usuário ao IDE

Implementação de comandos