Compartir a través de


Cómo: actualice la interfaz de usuario

Después de implementar un esquema de control en el Paquete, puede agregar código para actualizar la interfaz de (UI) usuario con el estado de los nuevos comandos.

En una aplicación Win32 típica, el conjunto de comando puede obtenerse continuamente sondeado y el estado de comandos individuales puede ajustarse como el usuario ve ellas. Sin embargo, porque puede el shell de Visual Studiohost un número ilimitado de VSPackages, el sondeo extenso podría reducir la capacidad de respuesta, sondeando especialmente a través de los ensamblados de interoperabilidad entre el código administrado y COM.

para actualizar la interfaz de usuario

  • Realice uno de estos pasos:

    • Llame al método UpdateCommandUI.

      Una interfaz de IVsUIShell se puede obtener del servicio de SVsUIShell , como sigue.

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

      Si el parámetro de UpdateCommandUI es distinto de cero (TRUE), la actualización se realiza de forma sincrónica y inmediatamente. Se recomienda pasa cero (FALSE) para que este parámetro ayuda a mantener un buen rendimiento. Si desea evitar el almacenamiento en caché, aplica el indicador de DontCache cuando se crea el comando en el archivo de .vsct. Sin embargo, utilice el marcador prudentemente o el rendimiento puede disminuir. Para obtener más información sobre las marcas de comando, vea la documentación de CommandFlag (Elemento) .

    • En VSPackages que hospedan un control ActiveX mediante el modelo de activación en contexto en una ventana, podría ser más conveniente utilizar el método de UpdateUI . El método de UpdateCommandUI en la interfaz de IVsUIShell y el método de UpdateUI en la interfaz de IOleInPlaceComponentUIManager son funcionalmente equivalentes. Ambos hacen que re-consulta de entorno el estado de todos los comandos. Normalmente, una actualización no se realiza inmediatamente. En su lugar, una actualización se retrasa hasta el tiempo de inactividad. El shell almacena en memoria caché el estado de comando para ayudar a mantener un buen rendimiento. Si desea evitar el almacenamiento en caché, aplica el indicador de DontCache cuando se crea el comando en el archivo de .vsct. Sin embargo, utilice el marcador prudentemente porque el rendimiento puede disminuir.

      Observe que puede obtener la interfaz de IOleInPlaceComponentUIManager llamando al método de QueryInterface en un objeto de IOleComponentUIManager u obtener la interfaz de servicio de SOleComponentUIManager .

Vea también

Conceptos

Cómo VSPackages agrega elementos de la interfaz de usuario al IDE

Implementación de comando