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 报告时计入一次,由提供程序报告时计入一次。