Compartir a través de


Implementación de un indicador de progreso

Hace referencia a: Outlook 2013 | Outlook 2016

Muchas de las operaciones iniciadas por los clientes tardan mucho tiempo. Uno de los parámetros de entrada de estas operaciones potencialmente largas es un puntero a un objeto de progreso, un objeto que implementa la interfaz IMAPIProgress : IUnknown . Los objetos Progress controlan la apariencia y la visualización de los indicadores de progreso y los implementan los clientes y MAPI. Puede elegir si quiere implementar o no un objeto de progreso. La implementación mapi está disponible para que los proveedores de servicios lo usen si decide no proporcionar una implementación.

Los objetos Progress funcionan con los siguientes datos:

  • Valor mínimo global que, cuando se llama al método IMAPIProgress::P rogress , debe ser menor o igual que el valor del parámetro ulValue . Al principio de la operación, ulValue será igual a este valor mínimo.

  • Valor máximo global que, cuando se llama al método IMAPIProgress::P rogress , debe ser mayor o igual que el parámetro ulValue . Al final de la operación, ulValue será igual a este valor máximo.

  • Valor de marca que indica si el progreso corresponde a un elemento de nivel superior o inferior.

  • Valor que indica el nivel actual de progreso de la operación.

  • Número de elementos procesados actualmente en relación con el total.

  • Número total de elementos que se van a procesar durante la operación.

Los valores mínimo y máximo representan el principio y el final de la operación en forma numérica. Use 1 para el valor mínimo inicial y 1000 para el valor máximo inicial, pasando estos valores a los proveedores de servicios en los métodos IMAPIProgress::GetMin e IMAPIProgress::GetMax . Los proveedores de servicios restablecen estos valores cuando llaman a IMAPIProgress::SetLimits.

Los proveedores de servicios usan el valor flags para determinar cómo deben establecer los demás valores. Inicialice el valor de flags en MAPI_TOP_LEVEL y devuelva este valor en la implementación de GetFlags hasta que el proveedor de servicios lo restablezca llamando a SetLimits.

En la implementación del método SetLimits , guarde copias locales de cada uno de los parámetros: lpulMin, lpulMax y lpulFlags. Estos valores deben estar disponibles fácilmente cuando un proveedor de servicios llama a los métodos GetMin, GetMax o GetFlags .

Para actualizar la visualización del indicador de progreso, los proveedores de servicios llaman al método IMAPIProgress::P rogress . Hay tres parámetros para este método: un valor, un recuento y un total. Use el primer parámetro, ulValue, para mostrar el indicador de progreso. El parámetro ulValue es el indicador de progreso y será igual a ulMin global solo al principio de la operación y igual a ulMax global solo al finalizar la operación.

Use los parámetros segundo y tercero, ulCount y ulTotal, si está disponible, para mostrar un mensaje opcional como "5 elementos completados de 10". Si los parámetros segundo y tercero se establecen en 0, puede elegir si desea cambiar visualmente el indicador de progreso. Algunos proveedores de servicios establecen estos parámetros en ceros para indicar que están procesando un subobjeto cuyo progreso se supervisa en relación con un objeto primario. En esta situación, tiene sentido cambiar la presentación solo cuando el objeto primario notifica el progreso. Algunos proveedores de servicios pasan ceros para estos parámetros cada vez.