Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Объекты, использующие данные из внешнего источника, иногда должны быть информированы при изменении данных в этом источнике. Например, средство просмотра ленты с тикером акций, использующее данные в какой-то электронной таблице, должно быть уведомлено при изменении данных, чтобы он смог обновить его отображение. Аналогичным образом составной документ нуждается в информации об изменениях данных в внедренных объектах, чтобы он смог обновить кэши данных. В таких случаях, когда динамическое обновление данных является желательным, источники данных требуют некоторого механизма уведомления потребителей данных об изменениях, не заставляя потребителей удалять все, чтобы обновить свои данные. В идеале, получив уведомление о том, что изменение произошло в источнике данных, потребляющий объект может попросить обновленную копию на своем досуге.
Механизм 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.