Отчет о ходе синхронизации
Платформа Microsoft Sync Framework передает отчет о ходе синхронизации в приложении, используя событие ProgressChanged (для управляемого кода) или событие ISyncCallback::OnProgress (для неуправляемого кода). Время вызова этого события и передаваемые им данные зависят от реализации поставщика источника.
Отчет о каждом изменении
По умолчанию платформа Sync Framework отправляет событие ProgressChanged (для управляемого кода) или событие ISyncCallback::OnProgress (для неуправляемого кода) один раз для каждого изменения, применяемого поставщиком назначения. Платформа Sync Framework дополнительно отправляет это событие один раз после полного применения каждого пакета изменений.
Это стандартное уведомление о ходе синхронизации применяется, только когда поставщик источника не задает оценку объема работы для изменений и пакетов изменений.
Отчет с оценкой объема работы
Платформа Sync Framework также может сообщать оценку объема работы для применяемых изменений и пакетов изменений. Поставщик источника должен выполнить оценку объема работы, необходимого для применения каждого изменения, и объема работы, необходимого для полного применения каждого пакета изменений. Поставщик источника также должен выполнить оценку оставшегося объема работы в сеансе синхронизации. Если поставщик источника задал эти значения, то во время применения пакета изменений платформа Sync Framework складывает объемы работы, выполненной при применении каждого изменения, конфликта или пакета изменений в поставщике назначения. Затем платформа Sync Framework периодически отправляет событие ProgressChanged (для управляемого кода) или событие ISyncCallback::OnProgress (для неуправляемого кода), чтобы сообщить текущее значение выполненного объема работы и общий объем работы в сеансе. Платформа Sync Framework также отправляет это событие после полного применения каждого пакета изменений.
Чтобы передать оценку объема работы, поставщик источника должен задать оценку объема работы для каждого изменения и каждого пакета изменения, а также оставшийся объем работы в сеансе, как описано в следующей таблице.
Тип оцениваемого объема работы | Задание в управляемом коде | Задание в неуправляемом коде |
---|---|---|
Изменение |
Параметр dwWorkForChange метода ISyncChangeBatchBase::AddItemMetadataToGroup или ISyncChangeBatch::AddLoggedConflict. Sync Framework также передает это значение с помощью метода ISyncChange::SetWorkEstimate. |
|
Пакет изменений |
||
Сеанс |
Настраиваемые отчеты о ходе выполнения
Поставщики также могут отправлять уведомления о ходе выполнения в любое время, вызывая метод OnProgressChanged (для управляемого кода) или метод ISyncSessionState::OnProgress (для неуправляемого кода). Если указана стадия синхронизации в виде значения ChangeApplication (для управляемого кода) или значения SPS_CHANGE_APPLICATION (для неуправляемого кода), платформа Sync Framework увеличивает общий объем выполненной работы каждый раз, когда отправляется уведомление о ходе выполнения. Платформа Sync Framework рассматривает заданный общий объем работы как оставшийся объем работы в сеансе и вычисляет общий объем работы для сеанса, добавляя заданный общий объем работы к совокупному значению выполненного объема работы. Затем платформа Sync Framework передает вычисленные значения в событие уведомления о ходе выполнения. Если стадия синхронизации имеет любое другое допустимое значение, оценка объема работы передается непосредственно в событие уведомления о ходе выполнения.
Следует соблюдать осторожность, чтобы не сообщать дважды об одном объеме работы, когда поставщик источника задает оценку объема работы, а поставщик назначения отправляет уведомления о ходе выполнения и задает для состояния синхронизации значение ChangeApplication (для управляемого кода) или значение SPS_CHANGE_APPLICATION (для неуправляемого кода). Такая ситуация возникает из-за того, что платформа Sync Framework увеличивает объем выполненной работы каждый раз, когда в ходе применения изменения отправляется уведомление о ходе выполнения. Если поставщик отправляет собственное уведомление о ходе выполнения, платформа Sync Framework добавит оценку объема работы, указанную поставщиком, к общему объему работы, выполненной в сеансе. Из-за этого одна и та же работа может быть посчитана дважды: один раз, когда о нем сообщает платформа Sync Framework, и один раз, когда о выполнении сообщает поставщик.