Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os objetos que consomem dados de uma fonte externa às vezes precisam ser informados quando os dados nessa fonte são alterados. Por exemplo, um visualizador de fita de ticker de ações que depende de dados em alguma planilha precisa ser notificado quando esses dados são alterados para que possa atualizar sua exibição. Da mesma forma, um documento composto precisa de informações sobre alterações de dados em seus objetos incorporados para que possa atualizar seus caches de dados. Em casos como este, em que a atualização dinâmica de dados é desejável, as fontes de dados exigem algum mecanismo de notificação dos consumidores de dados sobre as alterações à medida que elas ocorrem, sem obrigar os consumidores a largar tudo para atualizar seus dados. Idealmente, tendo sido notificado de que ocorreu uma alteração na fonte de dados, um objeto consumidor pode solicitar uma cópia atualizada a seu bel-prazer.
O mecanismo do COM para lidar com notificações assíncronas desse tipo é um objeto chamado coletor de aconselhamento, que é simplesmente qualquer objeto COM que implementa uma interface chamada IAdviseSink . Os consumidores de dados implementam o IAdviseSink. Eles se registram para receber notificações entregando um ponteiro para o objeto de dados de interesse.
O interfaces IAdviseSink expõe os seguintes métodos para receber notificações assíncronas:
| Método | Notifica o dissipador de aviso de que |
|---|---|
|
OnDataChange |
Os dados do objeto chamador foram alterados. |
|
OnViewChange |
As instruções para desenhar o objeto chamador foram alteradas. |
|
OnRename |
O apelido do objeto chamador foi alterado. |
|
OnSave |
O objeto de chamada foi salvo no armazenamento persistente. |
|
OnClose |
O objeto chamador foi fechado. |
Como a tabela indica, o interface IAdviseSink expõe métodos para notificar o coletor de aviso de eventos diferentes de alterações nos dados do objeto chamador. O objeto chamador também pode notificar o coletor quando a maneira como ele se desenha muda, ou ele é renomeado, salvo ou fechado. Estas outras notificações são utilizadas principal ou inteiramente no contexto de documentos compostos, embora o mecanismo de notificação seja idêntico. Para obter mais informações sobre notificações de documentos compostos, consulte "Documentos compostos".
Para aproveitar o coletor de aconselhamento, uma fonte de dados deve implementar IDataObject::D Advise, IDataObject::D Unadvisee IDataObject::EnumDAdvise. Um consumidor de dados chama o método DAdvise para notificar um objeto de dados que deseja ser notificado quando os dados do objeto são alterados. O objeto de consumo chama o método DUnadvise para derrubar essa conexão. Qualquer parte interessada pode ligar para o método EnumDAdvise para saber o número de objetos que têm uma conexão consultiva com um objeto de dados.
Quando os dados são alterados na origem, o objeto de dados chama IAdviseSink::OnDataChange em todos os consumidores de dados que se registraram para receber notificações. Para acompanhar as conexões de consultoria e gerenciar o envio de notificações, as fontes de dados dependem de um objeto chamado titular do aviso de dados. Você pode criar seu próprio titular de aviso de dados implementando o IDataAdviseHolder interface. Ou, você pode deixar o COM fazer isso por você chamando a função auxiliar CreateDataAdviseHolder.