Share via


Gestione degli eventi ADO

Il modello di evento ADO supporta determinate operazioni ADO sincrone e asincrone che generano eventi o notifiche prima dell'avvio o dopo il completamento dell'operazione. Un evento è in realtà una chiamata a una routine del gestore eventi definita nell'applicazione.

Se si forniscono funzioni o procedure del gestore per il gruppo di eventi che si verificano prima dell'avvio dell'operazione, è possibile esaminare o modificare i parametri passati all'operazione. Poiché non è ancora stato eseguita, è possibile annullare l'operazione o consentirne il completamento.

Gli eventi che si verificano dopo il completamento di un'operazione sono particolarmente importanti se si usa ADO in modo asincrono. Ad esempio, un'applicazione che avvia un'operazione Recordset.Open asincrona riceve una notifica da un evento di completamento dell’esecuzione al termine dell'operazione.

L'uso del modello di evento ADO aggiunge un sovraccarico all'applicazione, ma offre maggiore flessibilità rispetto ad altri metodi di gestione delle operazioni asincrone, ad esempio il monitoraggio della proprietà State di un oggetto con un ciclo.

Nota

Per gestire gli eventi, ADO deve avere una message pump o essere usato in un modello STA (Single-Threaded Apartment). Gli eventi ADO vengono gestiti internamente creando una finestra nascosta. ADO pubblica i messaggi in questa finestra quando gli eventi devono essere attivati. Questa operazione viene eseguita per assicurarsi che gli eventi vengano inviati al thread denominato IConnectionPoint::Advise sul punto di connessione. Questa architettura può causare problemi quando il thread che deve ricevere le notifiche non invia i messaggi della finestra. I potenziali problemi includono gli eventi ADO non recapitati al thread e il timeout delle trasmissioni alla finestra globale che potrebbe rallentare l'intero sistema perché le finestre nascoste non elaborano i messaggi. I thread STA in genere dispongono di una message pump in esecuzione in modo che questo problema non si manifesti nei thread STA. I thread MTA, tuttavia, non dispongono in genere di una message pump, quindi spesso il problema si manifesta nei thread MTA.

Questa sezione descrive gli argomenti seguenti:

Vedi anche

Riepilogo dei gestori eventi ADO
Creazione di istanze evento ADO per linguaggio
Eventi ADO
Parametri evento
Tipi di eventi