Share via


報告同步處理進度

Microsoft Sync Framework 使用 ProgressChanged 事件 (適用於 Managed 程式碼) 或 ISyncCallback::OnProgress 事件 (適用於 Unmanaged 程式碼),向應用程式報告同步處理進度。引發這個事件的時機和所傳達的資訊取決於來源提供者的實作。

報告每個變更

根據預設,Sync Framework 會為由目的地提供者套用的每個變更傳送一次 ProgressChanged 事件 (適用於 Managed 程式碼) 或 ISyncCallback::OnProgress 事件 (適用於 Unmanaged 程式碼)。Sync Framework 也會在每個變更批次完全都套用之後,傳送一次這個事件。

當來源提供者不為變更和變更批次指定工作量估計值時,才會使用此預設進度通知。

報告工作量估計值

Sync Framework 也可以為套用的變更和變更批次報告工作量估計值。來源提供者必須估計套用每個變更所需的工作量和完全套用每個變更批次所需的工作量。來源提供者也必須估計同步處理工作階段中剩餘的工作量。如果來源提供者已指定這些值,在套用變更批次的同時,Sync Framework 會隨著目的地提供者套用每個變更、衝突或變更批次,加總已完成的工作量,然後 Sync Framework 會定期傳送 ProgressChanged 事件 (適用於 Managed 程式碼) 或 ISyncCallback::OnProgress 事件 (適用於 Unmanaged 程式碼),報告工作階段中目前已完成工作量的總計,Sync Framework 也會在每個變更批次都已完全套用之後,傳送此事件。

若要報告工作量進度估計值,來源提供者必須為每個變更和每個變更批次指定工作量估計值,以及工作階段的剩餘工作量,如下表所述。

工作類型估計 使用 Managed 程式碼指定 使用 Unmanaged 程式碼指定

變更

WorkEstimate

ISyncChangeBatchBase::AddItemMetadataToGroupISyncChangeBatch::AddLoggedConflict 的 dwWorkForChange 參數。Sync Framework 也會透過 ISyncChange::SetWorkEstimate 提供此值。

變更批次

BatchWorkEstimate

ISyncChangeBatchBase::SetWorkEstimateForBatch

工作階段

RemainingSessionWorkEstimate

ISyncChangeBatchBase::SetRemainingWorkEstimateForSession

報告自訂進度

提供者也可以隨時透過呼叫 OnProgressChanged (適用於 Managed 程式碼) 或 ISyncSessionState::OnProgress (適用於 Unmanaged 程式碼),傳送進度通知。當同步處理階段指定為 ChangeApplication (適用於 Managed 程式碼) 或 SPS_CHANGE_APPLICATION (適用於 Unmanaged 程式碼) 時,Sync Framework 會在每次傳送進度通知時,累積已完成工作量的總計。Sync Framework 也會將指定的總工作量解譯為工作階段的剩餘工作量,並透過將指定的總工作量加上已完成工作量的累積值,計算工作階段的總工作量,然後 Sync Framework 再將這些計算好的值傳遞給進度通知事件。當同步處理階段是其他任何有效值時,工作量估計值就會直接傳遞給進度通知事件。

您必須加意小心,在來源提供者指定工作量估計值時,以及目的地提供者傳送進度通知及為同步處理階段指定 ChangeApplication (適用於 Managed 程式碼) 或 SPS_CHANGE_APPLICATION (適用於 Unmanaged 程式碼) 時,避免相同的工作量報告兩次。這是因為每次在變更套用期間傳送進度通知時,Sync Framework 都會加總已完成工作值。如果提供者傳送自訂的進度通知,Sync Framework 會將提供者所指定的工作量估計值加入至工作階段已完成的工作量總計。這樣可能會導致相同的工作計算兩次:一次是在 Sync Framework 報告時,而另一次是在提供者報告時。

請參閱

概念

同步處理提供者
回應同步處理事件