Condividi tramite


Procedura: aggiornare l'interfaccia utente

Dopo aver distribuito una combinazione della nel package VS, è possibile aggiungere il codice per aggiornare l'interfaccia (UI) utente con lo stato dei nuovi controlli.

In un'applicazione tipica Win32, l'insieme comando può essere continuamente polling e lo stato di singoli controlli può essere regolato ad esempio le visualizzazioni utenti ai ruoli. Tuttavia, poiché la shell di Visual Studiopossibile inserire un numero illimitato di VSPackages, un'estesa polling potrebbero diminuire la risposta, soprattutto tramite polling tramite gli assembly di interoperabilità tra codice gestito e COM.

Per aggiornare l'interfaccia utente

  • Effettuare uno dei passaggi riportati di seguito:

    • Chiamare il metodo UpdateCommandUI.

      Un'interfaccia di IVsUIShell può essere ottenuta dal servizio di SVsUIShell , come illustrato di seguito.

      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 il parametro di UpdateCommandUI è diverso da zero (TRUE), l'aggiornamento viene eseguito in modo sincrono e immediatamente. Si consiglia di passare zero (FALSE) per questo parametro per determinare a gestire buone prestazioni. Se si desidera evitare di memorizzare nella cache, applicare il flag di DontCache quando si crea il comando nel file di .vsct. Tuttavia, utilizzare controllata del flag o le prestazioni potrebbero diminuire. Per ulteriori informazioni sui flag di comando, Elemento Command Flag vedere la documentazione.

    • In package VS che ospita un controllo ActiveX utilizzando il modello di attivazione sul posto in una finestra, potrebbe essere preferibile utilizzare il metodo di UpdateUI . Il metodo di UpdateCommandUI interfaccia di IVsUIShell e il metodo di UpdateUI interfaccia di IOleInPlaceComponentUIManager sono equivalenti a livello funzionale. Entrambe provocano a chiede informazioni all'ambiente lo stato di tutti i controlli. In genere, come nell'esempio riportato di seguito, LoadSettingsFromXml anche convalida dei dati recuperati e aggiorna lo stato del package VS. Al contrario, un aggiornamento viene ritardata fino alla fase di inattività. La shell memorizzato nella cache lo stato di comando per gestire buone prestazioni. Se si desidera evitare di memorizzare nella cache, applicare il flag di DontCache quando si crea il comando nel file di .vsct. Tuttavia, utilizzare controllata del flag perché le prestazioni potrebbero diminuire.

      Si noti che è possibile ottenere l'interfaccia di IOleInPlaceComponentUIManager chiamando il metodo di QueryInterface su un oggetto di IOleComponentUIManager o ottenere l'interfaccia dal servizio di SOleComponentUIManager .

Vedere anche

Concetti

Come Vspackage aggiunge gli elementi dell'interfaccia utente dell'IDE

Implementazione del comando