Notificar el progreso de la sincronización

Microsoft Sync Framework notifica el progreso de la sincronización a una aplicación utilizando el evento ProgressChanged (en el código administrado) o el evento ISyncCallback::OnProgress (en el código no administrado). El momento en que se genera este evento y la información que notifica dependen de la implementación del proveedor de origen.

Notificar cada cambio

De forma predeterminada, Sync Framework envía el evento ProgressChanged (en el código administrado) o el evento ISyncCallback::OnProgress (en el código no administrado) una vez por cada cambio que el proveedor de destino aplica. Sync Framework también envía este evento una vez después de que cada lote de cambios se ha aplicado completamente.

Esta notificación de progreso predeterminada solo se usa cuando el proveedor de origen no especifica las estimaciones de trabajo para los cambios y los lotes de cambios.

Notificar el trabajo estimado

Sync Framework también puede notificar estimaciones de trabajo para los cambios y los lotes de cambios aplicados. El proveedor de origen debe estimar tanto el trabajo necesario para aplicar cada cambio como el trabajo necesario para aplicar completamente cada lote de cambios. El proveedor de origen también debe estimar el trabajo restante en la sesión de sincronización. Si el proveedor de origen ha especificado estos valores, mientras se aplica un lote de cambios, Sync Framework suma el trabajo completado a medida que el proveedor de destino aplica cada cambio, conflicto o lote de cambios. Sync Framework envía entonces periódicamente el evento ProgressChanged (en el código administrado) o el evento ISyncCallback::OnProgress (en el código no administrado) para notificar el trabajo total completado en ese momento y el trabajo total en la sesión. Sync Framework también envía este evento una vez aplicado completamente cada lote de cambios.

Para notificar el progreso del trabajo estimado, el proveedor de origen debe especificarlo para cada cambio y cada lote de cambios, y especificar el trabajo restante para la sesión, tal y como se describe en la tabla siguiente.

Tipo de trabajo estimado Especificar con código administrado Especificar con código no administrado

Cambio

WorkEstimate

El parámetro dwWorkForChange de ISyncChangeBatchBase::AddItemMetadataToGroup o ISyncChangeBatch::AddLoggedConflict. Sync Framework también proporciona este valor a través de ISyncChange::SetWorkEstimate.

Lote de cambios

BatchWorkEstimate

ISyncChangeBatchBase::SetWorkEstimateForBatch

Sesión

RemainingSessionWorkEstimate

ISyncChangeBatchBase::SetRemainingWorkEstimateForSession

Notificar el progreso personalizado

Los proveedores también pueden enviar en cualquier momento una notificación de progreso llamando a OnProgressChanged (en el código administrado) o a ISyncSessionState::OnProgress (en el código no administrado). Cuando la etapa de sincronización se especifica como ChangeApplication (en el código administrado) o SPS_CHANGE_APPLICATION (en el código no administrado), Sync Framework acumula el trabajo total completado cada vez que se envía la notificación de progreso. Sync Framework también interpreta el trabajo total especificado como el trabajo restante para la sesión y calcula el trabajo total para la sesión sumando el trabajo total especificado al valor acumulado del trabajo completado. Sync Framework pasa entonces estos valores calculados al evento de notificación de progreso. Cuando la etapa de sincronización es cualquier otro valor válido, los valores del trabajo estimado se pasan directamente al evento de notificación de progreso.

Hay que tener cuidado para evitar notificar el mismo trabajo dos veces cuando el proveedor de origen especifica las estimaciones de trabajo, y el proveedor de destino envía las notificaciones de progreso y especifica ChangeApplication (en el código administrado) o SPS_CHANGE_APPLICATION (en el código no administrado) como estado de la sincronización. Esto se debe a que Sync Framework suma el valor del trabajo completado cada vez que se envían notificaciones de progreso durante la aplicación de cambios. Si un proveedor envía su propia notificación de progreso, Sync Framework agrega los valores de trabajo estimado especificados por el proveedor al trabajo total completado para la sesión. Esto puede hacer que el mismo trabajo se cuente dos veces: una cuando lo notifica Sync Framework y otra cuando lo notifica el proveedor.

Vea también

Conceptos

Implementar un proveedor estándar personalizado
Responder a eventos de sincronización