同期の進行状況の報告
Microsoft Sync Framework は、ProgressChanged イベント (マネージ コードの場合) または ISyncCallback::OnProgress イベント (アンマネージ コードの場合) を使用して、同期の進行状況をアプリケーションに報告します。このイベントが発生したときに受け渡される情報は、同期元プロバイダーの実装により異なります。
各変更の報告
既定では、同期先プロバイダーによって変更が適用されるたびに 1 回、Sync Framework から ProgressChanged イベント (マネージ コードの場合) または ISyncCallback::OnProgress イベント (アンマネージ コードの場合) が送信されます。変更バッチが完全に適用された後にも、Sync Framework から 1 回、このイベントが送信されます。
この既定の進行状況通知は、同期元プロバイダーで変更および変更バッチの作業見積もりが指定されていない場合にのみ使用されます。
作業見積もりの報告
Sync Framework は、適用された変更および変更バッチの作業見積もりを報告することもできます。同期元プロバイダーは、各変更を適用するために必要な作業と、各変更バッチを完全に適用するために必要な作業の両方を見積もる必要があります。同期セッションの残りの作業も、同期元プロバイダーが見積もる必要があります。これらの値が同期元プロバイダーによって指定されていた場合、Sync Framework は、変更バッチの適用中、それぞれの変更、競合、または変更バッチが同期先プロバイダーによって適用されるたびに、完了した作業を加算します。さらに、Sync Framework は、定期的に ProgressChanged イベント (マネージ コードの場合) または ISyncCallback::OnProgress イベント (アンマネージ コードの場合) を送信することによって、現在完了した作業の合計と、セッションの合計作業を報告します。変更バッチが完全に適用された後にも、Sync Framework から 1 回、このイベントが送信されます。
作業の進行状況の見積もりを報告するためには、次の表に示したように、同期元プロバイダーで、各変更の作業見積もり、各変更バッチの作業見積もり、およびセッションの残りの作業を指定する必要があります。
作業見積もりの種類 | マネージ コードによる指定 | アンマネージ コードによる指定 |
---|---|---|
変更 |
ISyncChangeBatchBase::AddItemMetadataToGroup または ISyncChangeBatch::AddLoggedConflict の dwWorkForChange パラメーター。この値は、Sync Framework の ISyncChange::SetWorkEstimate を使って設定することもできます。 |
|
変更バッチ |
||
セッション |
カスタム進行状況の報告
プロバイダーは、OnProgressChanged (マネージ コードの場合) または ISyncSessionState::OnProgress (アンマネージ コードの場合) を呼び出すことにより、任意のタイミングで進行状況通知を送信できます。同期段階が ChangeApplication (マネージ コードの場合) または SPS_CHANGE_APPLICATION (アンマネージ コードの場合) として指定された場合、Sync Framework は、進行状況通知が送られるたびに、合計完了作業量を累計します。また、Sync Framework は、指定された合計作業をセッションの残りの作業として解釈し、指定された合計作業を完了済み作業の累計値に加算することによってセッションの合計作業を計算します。これらの算出された値が、Sync Framework から進行状況通知イベントへと渡されます。同期段階が、他の有効な値であった場合、作業見積もりの値が直接、進行状況通知イベントに渡されます。
同期元プロバイダーで作業見積もりを指定するときや、同期先プロバイダーから進行状況通知を送信して同期状態の ChangeApplication (マネージ コードの場合) または SPS_CHANGE_APPLICATION (アンマネージ コードの場合) を指定するときには、同じ作業が 2 回報告されることのないように注意してください。これは、変更の適用中に進行状況の通知が送信されるたびに、完了済みの作業の値が Sync Framework によって加算されるためです。プロバイダーが独自の進行状況通知を送信する場合、Sync Framework は、プロバイダーが指定した作業見積もり値をセッションの合計完了作業量に加えます。これによって同じ作業が 2 回数えられます。1 回は Sync Framework が報告するとき、もう 1 回はプロバイダーが報告するときです。