Partager via


Gestion des événements ADO

Le modèle d’événements ADO prend en charge certaines opérations ADO synchrones et asynchrones qui émettent des événements , ou des notifications, avant le démarrage ou la fin de l’opération. Un événement est en fait un appel à une routine de gestionnaire d’événements que vous définissez dans votre application.

Si vous fournissez des fonctions de gestionnaire ou des procédures pour le groupe d’événements qui se produisent avant le démarrage de l’opération, vous pouvez examiner ou modifier les paramètres passés à l’opération. Étant donné qu’elle n’a pas encore été exécutée, vous pouvez annuler l’opération ou l’autoriser à se terminer.

Les événements qui se produisent après la fin d’une opération sont particulièrement importants si vous utilisez ADO de manière asynchrone. Par exemple, une application qui démarre une opération asynchrone Recordset.Open est avertie par un événement d’exécution terminé lorsque l’opération se termine.

L’utilisation du modèle d’événements ADO ajoute une surcharge à votre application, mais offre beaucoup plus de flexibilité que d’autres méthodes de traitement des opérations asynchrones, telles que la surveillance de la propriété State d’un objet avec une boucle.

Note

Pour gérer les événements, ADO doit avoir une pompe de messages ou être utilisé dans un modèle STA (Single-Threaded Apartment). Les événements ADO sont gérés en interne en créant une fenêtre masquée. ADO publie des messages dans cette fenêtre lorsque les événements doivent être déclenchés. Cela est fait pour s'assurer que les événements sont envoyés au thread qui a appelé IConnectionPoint::Advise sur le point de connexion. Cette architecture peut entraîner des problèmes lorsque le thread qui doit recevoir les notifications ne pompe pas les messages de fenêtre. Les problèmes potentiels incluent les événements ADO qui ne sont pas remis au thread et aux diffusions de fenêtre globale qui expirent et ralentissent éventuellement l’ensemble du système, car les fenêtres masquées ne traitent pas les messages. Les threads STA ont généralement une pompe de message en cours d’exécution afin que ce problème ne se manifeste pas sur les threads STA. Toutefois, les threads MTA ne disposent généralement pas d’une pompe de messages afin que le problème se manifeste généralement sur les threads MTA.

Cette section contient les rubriques suivantes.

Voir aussi

Résumé du Gestionnaire d'événements ADO
Instantiation d'événements ADO par langue
ADO Événements
paramètres d’événement
types d’événements