Relatando o progresso da sincronização

O Microsoft Sync Framework relata o progresso da sincronização a um aplicativo usando o evento ProgressChanged (para código gerenciado) ou o evento ISyncCallback::OnProgress (para código não gerenciado). O momento em que esse evento é gerado e as informações que ele comunica dependem da implementação do provedor de origem.

Relatando cada alteração

Por padrão, o Sync Framework envia o evento ProgressChanged (para código gerenciado) ou o evento ISyncCallback::OnProgress (para código não gerenciado) uma vez para cada alteração aplicada pelo provedor de destino. O Sync Framework também envia para o evento uma vez depois que cada lote de alteração é aplicado completamente.

Esta notificação de progresso padrão é usada somente quando o provedor de origem não especifica estimativas de trabalho para alterações e lotes de alterações.

Relatando o trabalho estimado

O Sync Framework também pode relatar estimativas de trabalho para alterações aplicadas e lotes de alterações. O provedor de origem deve estimar o trabalho necessário para aplicar cada alteração e o trabalho necessário para aplicar totalmente cada lote de alterações. O provedor de origem também deve estimar o trabalho restante na sessão de sincronização. Se o provedor de origem especificou esses valores, enquanto um lote de alterações é aplicado, o Sync Framework soma o trabalho concluído à medida que cada alteração, conflito, ou lote de alterações é aplicado pelo provedor de destino. Em seguida, o Sync Framework envia periodicamente o evento ProgressChanged (para código gerenciado) ou o evento ISyncCallback::OnProgress (para código não gerenciado) para relatar o total atual de trabalho concluído e o trabalho total na sessão. O Sync Framework também envia o evento depois que cada lote de alterações é completamente aplicado.

Para relatar o progresso do trabalho estimado, o provedor de origem deve especificar o trabalho estimado para cada alteração e cada lote de alterações, além do trabalho restante para a sessão como descrito na tabela a seguir.

Tipo de trabalho estimado Especifique usando código gerenciado Especifique usando código não gerenciado

Alteração

WorkEstimate

O parâmetro dwWorkForChange de ISyncChangeBatchBase::AddItemMetadataToGroup ou ISyncChangeBatch::AddLoggedConflict. Sync Framework também fornece esse valor por meio de ISyncChange::SetWorkEstimate.

Lote de alterações

BatchWorkEstimate

ISyncChangeBatchBase::SetWorkEstimateForBatch

Sessão

RemainingSessionWorkEstimate

ISyncChangeBatchBase::SetRemainingWorkEstimateForSession

Relatando progresso personalizado

Os provedores também podem enviar a qualquer momento uma notificação de progresso chamando OnProgressChanged (para código gerenciado) ou ISyncSessionState::OnProgress (para código não gerenciado). Quando a fase de sincronização é especificada como ChangeApplication (para código gerenciado) ou SPS_CHANGE_APPLICATION (para código não gerenciado), o Sync Framework acumula o total de trabalho concluído sempre que a notificação de progresso é enviada. O Sync Framework também interpreta o trabalho total especificado como o trabalho restante para a sessão e calcula o trabalho total para a sessão somando o trabalho total especificado ao valor acumulado para trabalho concluído. Em seguida, o Sync Framework passa esses valores calculados para o evento de notificação de progresso. Quando a fase de sincronização é qualquer outro valor válido, os valores de estimativa de trabalho são passados diretamente para o evento de notificação de progresso.

Evite relatar o mesmo trabalho duas vezes quando o provedor de origem especifica estimativas de trabalho, e o provedor de destino envia notificações de progresso e especifica ChangeApplication (para código gerenciado) ou SPS_CHANGE_APPLICATION (para código não gerenciado) para o estado de sincronização. Isso ocorre porque o Sync Framework soma o valor do trabalho concluído sempre que são enviadas notificações de progresso durante a aplicação de alterações. Se um provedor enviar sua própria notificação de progresso, o Sync Framework adicionará os valores de estimativa de trabalho especificados pelo provedor ao trabalho total concluído da sessão. Isso pode fazer com que o mesmo trabalho seja contado duas vezes: uma vez quando ele é relatado pelo Sync Framework e outra quando é relatado pelo provedor.

Consulte também

Conceitos

Implementando um provedor personalizado padrão
Respondendo a eventos de sincronização