Datenbenachrichtigung

Objekte, die Daten aus einer externen Quelle nutzen, müssen manchmal informiert werden, wenn sich Daten in dieser Quelle ändern. Beispielsweise muss ein Stock Ticker-Bandviewer, der auf Daten in einem Arbeitsblatt basiert, benachrichtigt werden, wenn sich diese Daten ändern, damit die Anzeige aktualisiert werden kann. Ebenso benötigt ein Verbunddokument Informationen zu Datenänderungen in seinen eingebetteten Objekten, damit es seine Datencaches aktualisieren kann. In solchen Fällen, in denen eine dynamische Aktualisierung von Daten wünschenswert ist, erfordern Datenquellen einen Mechanismus, mit dem Datenverbraucher über Änderungen benachrichtigt werden, während sie auftreten, ohne dass die Verbraucher dazu verpflichtet werden, alles zu verdrängen, um ihre Daten zu aktualisieren. Im Idealfall kann ein verbrauchendes Objekt nach einer Benachrichtigung, dass eine Änderung in der Datenquelle aufgetreten ist, eine aktualisierte Kopie bei seiner Arbeit erfragen.

Der COM-Mechanismus für die Verarbeitung asynchroner Benachrichtigungen dieses Typs ist ein Objekt, das als Advise-Senke bezeichnet wird. Dabei handelt es sich einfach um jedes COM-Objekt, das eine Schnittstelle namens IAdviseSink implementiert. Datenverbraucher implementieren IAdviseSink. Sie registrieren sich, um Benachrichtigungen zu empfangen, indem sie einen Zeiger auf das datenobjekt von Interesse senden.

Die IAdviseSink-Schnittstellen machen die folgenden Methoden für den Empfang asynchroner Benachrichtigungen verfügbar:

Methode Benachrichtigt die Advise-Senke, dass
OnDataChange
Die Daten des aufrufenden Objekts wurden geändert.
OnViewChange
Die Anweisungen zum Zeichnen des aufrufenden Objekts wurden geändert.
OnRename
Der Moniker des aufrufenden Objekts wurde geändert.
Onsave
Das aufrufende Objekt wurde im persistenten Speicher gespeichert.
OnClose
Das aufrufende Objekt wurde geschlossen.

Wie die Tabelle zeigt, macht die IAdviseSink-Schnittstelle Methoden zum Benachrichtigen der Advise-Senke über Ereignisse verfügbar, die keine Änderungen in den Daten des aufrufenden Objekts sind. Das aufrufende Objekt kann die Senke auch benachrichtigen, wenn sich die Art und Weise ändert, in der es sich selbst zeichnet, oder es umbenannt, gespeichert oder geschlossen wird. Diese anderen Benachrichtigungen werden hauptsächlich oder vollständig im Kontext zusammengesetzter Dokumente verwendet, obwohl der Benachrichtigungsmechanismus identisch ist. Weitere Informationen zu Verbunddokumentbenachrichtigungen finden Sie unter "Verbunddokumente".

Um die Advise-Senke nutzen zu können, muss eine Datenquelle IDataObject::D Advise, IDataObject::D Unadviseund IDataObject::EnumDAdvise implementieren. Ein Datenverbraucher ruft das DAdvise-Benachrichtigungsobjekt auf, um ein Datenobjekt zu benachrichtigen, dass es benachrichtigt werden möchte, wenn sich die Daten des Objekts ändern. Das verwendende Objekt ruft die DUnadvise-Methode auf, um diese Verbindung zu entstehen. Alle interessierten Parteien können die EnumDAdvise-Methode aufrufen, um die Anzahl der Objekte zu erfahren, die über eine Beratungsverbindung mit einem Datenobjekt verfügen.

Wenn sich Daten an der Quelle ändern, ruft das Datenobjekt IAdviseSink::OnDataChange für alle Datenverbraucher auf, die sich für den Empfang von Benachrichtigungen registriert haben. Zum Nachverfolgen von Beratungsverbindungen und zum Verwalten der Benachrichtigungssendung verwenden Datenquellen ein Objekt, das als Besitzer der Datenempfehlung bezeichnet wird. Sie können einen eigenen Besitzer für die Datenführung erstellen, indem Sie die IDataAdviseHolder-Schnittstelle implementieren. Oder Sie können COM dies für Sie tun lassen, indem Sie die Hilfsfunktion CreateDataAdviseHolder aufrufen.

Datenübertragung