Udostępnij przez


Powiadomienie o danych

Obiekty korzystające z danych ze źródła zewnętrznego czasami muszą być informowany, gdy dane w tym źródle się zmieniają. Na przykład przeglądarka taśm znaczników giełdowych, która opiera się na danych w niektórych arkuszach kalkulacyjnych, musi zostać powiadomiona, gdy te dane zmienią się, aby można było zaktualizować jego wyświetlacz. Podobnie dokument złożony wymaga informacji o zmianach danych w swoich obiektach osadzonych, aby mógł aktualizować pamięci podręczne danych. W takich przypadkach, w których pożądane jest dynamiczne aktualizowanie danych, źródła danych wymagają pewnego mechanizmu powiadamiania użytkowników danych o zmianach, ponieważ występują bez konieczności wprowadzania przez konsumentów wszystkiego w celu zaktualizowania danych. W idealnym przypadku po powiadomieniu o zmianie w źródle danych obiekt zużywający może poprosić o zaktualizowaną kopię w czasie wolnym.

Mechanizm modelu COM do obsługi powiadomień asynchronicznych tego typu jest obiektem nazywanym ujściem doradcy, który jest po prostu dowolnym obiektem COM, który implementuje interfejs o nazwie IAdviseSink. Konsumenci danych implementują IAdviseSink. Rejestrują się, aby otrzymywać powiadomienia, przekazując wskaźnik do obiektu danych, który cię interesuje.

Interfejsy IAdviseSink uwidacznia następujące metody odbierania powiadomień asynchronicznych:

Metoda Powiadamia doradcę, że ujście
onDataChange
Dane obiektu wywołującego uległy zmianie.
OnViewChange
Instrukcje dotyczące rysowania obiektu wywołującego uległy zmianie.
onrename
Nazwa obiektu wywołującego uległa zmianie.
Wsave
Obiekt wywołujący został zapisany w magazynie trwałym.
OnClose
Obiekt wywołujący został zamknięty.

Jak wskazuje tabela, interfejs IAdviseSinkuwidacznia metody powiadamiania ujścia zdarzeń innych niż zmiany w danych obiektu wywołującego. Obiekt wywołujący może również powiadamiać ujście, gdy sposób, w jaki rysuje się, zmienia się lub jest zmieniany, zapisywany lub zamykany. Te inne powiadomienia są używane głównie lub całkowicie w kontekście złożonych dokumentów, chociaż mechanizm powiadamiania jest identyczny. Aby uzyskać więcej informacji na temat powiadomień złożonych dokumentów, zobacz "Dokumenty złożone".

Aby móc korzystać z ujścia porady, źródło danych musi zaimplementować IDataObject::D Advise, IDataObject::D Unadvisei IDataObject::EnumDAdvise. Odbiorca danych wywołuje metodę DAdvise , aby powiadomić obiekt danych o tym, że ma zostać powiadomiony o zmianie danych obiektu. Obiekt zużywające wywołuje metodę DUnadvise, aby usunąć to połączenie. Każda zainteresowana strona może wywołać metodę EnumDAdvise, aby dowiedzieć się, ile obiektów ma połączenie doradcze z obiektem danych.

Gdy dane zmieniają się w źródle, obiekt danych wywołuje IAdviseSink::OnDataChange dla wszystkich użytkowników danych zarejestrowanych w celu odbierania powiadomień. Aby śledzić połączenia doradcze i zarządzać wysyłaniem powiadomień, źródła danych bazują na obiekcie nazywanym posiadaczem danych. Możesz utworzyć własnego właściciela doradcy danych, implementując interfejs IDataAdviseHolder. Możesz też zezwolić modelu COM na to, wywołując funkcję pomocnika CreateDataAdviseHolder.

transferu danych