Actualización de la interfaz de usuario

Después de implementar un comando, puede agregar código para actualizar la interfaz de usuario con el estado de los nuevos comandos.

En una aplicación win32 típica, el conjunto de comandos se puede sondear continuamente y el estado de los comandos individuales se puede ajustar a medida que el usuario los ve. Sin embargo, dado que el shell de Visual Studio puede hospedar un número ilimitado de VSPackages, un sondeo extenso podría reducir la capacidad de respuesta, especialmente el sondeo entre ensamblados de interoperabilidad entre código administrado y COM.

Para actualizar la interfaz de usuario

  1. Realice uno de estos pasos:

    • Llame al método UpdateCommandUI.

      Se puede obtener una IVsUIShell interfaz del SVsUIShell servicio, como se indica a continuación.

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

      Si el parámetro de es distinto de UpdateCommandUI cero (TRUE), la actualización se realiza de forma sincrónica e inmediata. Se recomienda pasar cero (FALSE) para este parámetro para ayudar a mantener un buen rendimiento. Si desea evitar el almacenamiento en caché, aplique la DontCache marca al crear el comando en el archivo .vsct. Sin embargo, el uso de la marca con precaución o rendimiento podría disminuir. Para obtener más información sobre las marcas de comandos, consulte la documentación del elemento De marca de comandos.

    • En VSPackages que hospedan un control ActiveX mediante el modelo de activación local en una ventana, puede ser más conveniente usar el UpdateUI método . El UpdateCommandUI método de la IVsUIShell interfaz y el UpdateUI método de la IOleInPlaceComponentUIManager interfaz son funcionalmente equivalentes. Ambos hacen que el entorno vuelva a consultar el estado de todos los comandos. Normalmente, una actualización no se realiza inmediatamente. En su lugar, se retrasa una actualización hasta el tiempo de inactividad. El shell almacena en caché el estado del comando para ayudar a mantener un buen rendimiento. Si desea evitar el almacenamiento en caché, aplique la DontCache marca al crear el comando en el archivo .vsct. No obstante, use la marca con precaución porque el rendimiento podría disminuir.

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