Поделиться через


Уведомление о данных

Объекты, использующие данные из внешнего источника, иногда должны быть информированы при изменении данных в этом источнике. Например, средство просмотра ленты с тикером акций, использующее данные в какой-то электронной таблице, должно быть уведомлено при изменении данных, чтобы он смог обновить его отображение. Аналогичным образом составной документ нуждается в информации об изменениях данных в внедренных объектах, чтобы он смог обновить кэши данных. В таких случаях, когда динамическое обновление данных является желательным, источники данных требуют некоторого механизма уведомления потребителей данных об изменениях, не заставляя потребителей удалять все, чтобы обновить свои данные. В идеале, получив уведомление о том, что изменение произошло в источнике данных, потребляющий объект может попросить обновленную копию на своем досуге.

Механизм COM для обработки асинхронных уведомлений этого типа — это объект, называемый приемником советов, который просто любой COM-объект, реализующий интерфейс, называемый IAdviseSink. Потребители данных реализуют IAdviseSink. Они регистрируются для получения уведомлений, передав указатель на интересующий объект данных.

Интерфейсы IAdviseSink предоставляют следующие методы для получения асинхронных уведомлений:

Метод Уведомляет приемник советуем, что
OnDataChange
Изменены данные вызывающего объекта.
OnViewChange
Инструкции по рисованию вызывающего объекта изменились.
OnRename
Моникер вызывающего объекта изменился.
OnSave
Вызывающий объект сохранен в постоянном хранилище.
OnClose
Вызывающий объект закрыт.

Как указано в таблице, интерфейс IAdviseSink предоставляет методы уведомления приемника событий, отличных от изменений в данных вызывающего объекта. Вызывающий объект также может уведомлять приемник о том, как он выполняет изменения, или переименовывается, сохраняется или закрывается. Эти другие уведомления используются в основном или полностью в контексте составных документов, хотя механизм уведомлений идентичен. Дополнительные сведения о уведомлениях составных документов см. в разделе "Составные документы".

Чтобы воспользоваться приемником рекомендаций, источник данных должен реализовать IDataObject::D Advise, IDataObject::D Unadviseи IDataObject::EnumDAdvise. Потребитель данных вызывает метод DAdvise , чтобы уведомить объект данных о том, что он хочет получать уведомления при изменении данных объекта. Используемый объект вызывает метод DUnadvise, чтобы отключить это соединение. Любой заинтересованный участник может вызвать метод EnumDAdvise, чтобы узнать количество объектов, имеющих консультативное подключение к объекту данных.

При изменении данных в источнике объект данных вызывает IAdviseSink::OnDataChange для всех потребителей данных, зарегистрированных для получения уведомлений. Чтобы отслеживать консультационные подключения и управлять отправкой уведомлений, источники данных полагаются на объект, называемый владельцем данных,. Вы можете создать собственный владелец данных, реализуя интерфейс IDataAdviseHolder. Кроме того, вы можете позволить COM сделать это для вас, вызвав вспомогательные функции CreateDataAdviseHolder.

передачи данных