ISyncSessionState::OnProgress
向應用程式報告同步處理進度。
HRESULT OnProgress(
SYNC_PROVIDER_ROLE provider,
SYNC_PROGRESS_STAGE syncStage,
DWORD dwCompletedWork,
DWORD dwTotalWork);
參數
- provider
[in] 傳送此事件之提供者的角色。
- syncStage
[in] 同步處理工作階段的目前階段。
- dwCompletedWork
[in] 此工作階段目前已完成的工作量。這個值會解譯為 dwTotalWork 的一部分。
- dwTotalWork
[in] 此工作階段的總工作量。
傳回值
S_OK
如果 provider 或 syncStage 不是有效的值,則為 E_INVALIDARG。
備註
您可以使用這個方法,向應用程式報告自訂進度。當提供者呼叫這個方法時,就會引發 ISyncCallback::OnProgress 事件。
當您為 syncStage 指定 SPS_CHANGE_APPLICATION 時,Sync Framework 會累積每次呼叫 ISyncSessionState::OnProgress 時由 dwCompletedWork 所指定的已完成工作量總計,Sync Framework 也會將 dwTotalWork 解譯為工作階段的剩餘工作量,並透過將 dwTotalWork 加入至已完成工作量的累積值,計算工作階段的總工作量,然後 Sync Framework 會將這些計算的值傳遞給 ISyncCallback::OnProgress。當 syncStage 是任何其他有效的值時,dwCompletedWork 和 dwTotalWork 都會直接傳遞給 ISyncCallback::OnProgress。
當來源提供者指定了工作量估計值時,如果提供者呼叫 ISyncSessionState::OnProgress 並為 syncStage 指定 SPS_CHANGE_APPLICATION 時,就可能會發生非預期的結果。這是因為每次在變更應用程式期間傳送進度通知時,Sync Framework 就會加總已完成工作值。如果提供者傳送自訂的進度通知,並且針對 syncStage 指定 SPS_CHANGE_APPLICATION,Sync Framework 就會將提供者所指定的工作量估計值加入至工作階段的已完成工作總計。這樣可能會導致相同的工作計算兩次:一次是在 Sync Framework 報告時,而另一次是在提供者報告時。