Condividi tramite


Aggiornamento dell'interfaccia utente

Dopo aver implementato un comando, è possibile aggiungere codice per aggiornare l'interfaccia utente con lo stato dei nuovi comandi.

In un'applicazione Win32 tipica, il set di comandi può essere sottoposto a polling continuo e lo stato dei singoli comandi può essere modificato quando l'utente le visualizza. Tuttavia, poiché la shell di Visual Studio può ospitare un numero illimitato di VSPackage, il polling esteso potrebbe ridurre la velocità di risposta, in particolare il polling tra assembly di interoperabilità tra codice gestito e COM.

Per aggiornare l'interfaccia utente

  1. Effettuare uno dei passaggi indicati di seguito.

    • Chiamare il metodo UpdateCommandUI .

      Un'interfaccia IVsUIShellSVsUIShell può essere ottenuta dal servizio, come indicato di seguito.

      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 il parametro di UpdateCommandUI è diverso da zero (TRUE), l'aggiornamento viene eseguito in modo sincrono e immediato. È consigliabile passare zero (FALSE) per questo parametro per mantenere buone prestazioni. Se si vuole evitare la memorizzazione nella cache, applicare il DontCache flag quando si crea il comando nel file vsct. Tuttavia, usare il flag con cautela o le prestazioni potrebbero diminuire. Per altre informazioni sui flag di comando, vedere la documentazione dell'elemento Command Flag.

    • In VSPackage che ospitano un controllo ActiveX usando il modello di attivazione sul posto in una finestra, potrebbe essere più utile usare il UpdateUI metodo . Il UpdateCommandUI metodo nell'interfaccia IVsUIShell e il UpdateUI metodo nell'interfaccia IOleInPlaceComponentUIManager sono equivalenti a livello funzionale. Entrambi fanno in modo che l'ambiente eselabori nuovamente lo stato di tutti i comandi. In genere, un aggiornamento non viene eseguito immediatamente. Un aggiornamento viene invece ritardato fino al tempo di inattività. La shell memorizza nella cache lo stato del comando per garantire prestazioni ottimali. Se si vuole evitare la memorizzazione nella cache, applicare il DontCache flag quando si crea il comando nel file vsct. Tuttavia, usare il flag con cautela perché le prestazioni potrebbero diminuire.

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