Notifica dei dati

Gli oggetti che utilizzano dati da un'origine esterna a volte devono essere informati quando i dati in tale origine vengono modificati. Ad esempio, un visualizzatore nastro ticker azionario che si basa sui dati in un foglio di calcolo deve ricevere una notifica quando i dati cambiano in modo che possano aggiornarne la visualizzazione. Analogamente, un documento composto necessita di informazioni sulle modifiche dei dati negli oggetti incorporati in modo che possa aggiornare le cache dei dati. In casi come questo, in cui l'aggiornamento dinamico dei dati è auspicabile, le origini dei dati richiedono un meccanismo di notifica ai consumer di dati delle modifiche man mano che si verificano senza obbligare i consumer a eliminare tutti gli elementi per aggiornare i dati. Idealmente, avendo ricevuto una notifica che si è verificata una modifica nell'origine dati, un oggetto che utilizza può richiedere una copia aggiornata nel suo tempo libero.

Il meccanismo COM per la gestione delle notifiche asincrone di questo tipo è un oggetto denominato sink di avviso, che è semplicemente qualsiasi oggetto COM che implementa un'interfaccia denominata IAdviseSink. I consumer di dati implementano l'IAdviseSink. Si registrano per ricevere notifiche passando un puntatore all'oggetto dati di interesse.

Le interfacceIAdviseSinkespongono i metodi seguenti per la ricezione di notifiche asincrone:

Metodo Notifica al sink di avviso che
OnDataChange
I dati dell'oggetto chiamante sono stati modificati.
OnViewChange
Le istruzioni per disegnare l'oggetto chiamante sono state modificate.
OnRename
Il moniker dell'oggetto chiamante è stato modificato.
OnSave
L'oggetto chiamante è stato salvato nell'archivio permanente.
OnClose
L'oggetto chiamante è stato chiuso.

Come indicato nella tabella, l'interfacciaIAdviseSinkespone metodi per notificare al sink di avvisi eventi diversi dalle modifiche apportate ai dati dell'oggetto chiamante. L'oggetto chiamante può anche notificare al sink quando viene disegnato il modo in cui viene disegnato o rinominato, salvato o chiuso. Queste altre notifiche vengono usate principalmente o interamente nel contesto di documenti composti, anche se il meccanismo di notifica è identico. Per altre informazioni sulle notifiche di documenti composti, vedere "Documenti composti".

Per sfruttare i vantaggi del sink consigliato, un'origine dati deve implementare IDataObject::D Advise, IDataObject::D Unadvisee IDataObject::EnumDAdvise. Un consumer di dati chiama il metodo DAdvise per notificare a un oggetto dati che desidera ricevere una notifica quando cambiano i dati dell'oggetto. L'oggetto che utilizza chiama il metodo DUnadvise per rimuovere questa connessione. Qualsiasi parte interessata può chiamare il metodo EnumDAdvise per apprendere il numero di oggetti che hanno una connessione consultiva con un oggetto dati.

Quando i dati cambiano nell'origine, l'oggetto dati chiama IAdviseSink::OnDataChange su tutti i consumer di dati registrati per ricevere notifiche. Per tenere traccia delle connessioni consultive e gestire l'invio delle notifiche, le origini dati si basano su un oggetto denominato titolare dei dati. È possibile creare il proprio titolare dei dati implementando l'interfaccia IDataAdviseHolder. In alternativa, è possibile consentire a COM di farlo chiamando la funzione helper CreateDataAdviseHolder.

trasferimento dati