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

请参阅

参考

ISyncSessionState 接口

概念

报告同步进度