Freigeben über


Behandeln von ADO-Ereignissen

Das ADO-Ereignismodell unterstützt bestimmte synchrone und asynchrone ADO-Vorgänge, die Ereignisseoder Benachrichtigungen ausgeben, bevor der Vorgang gestartet oder nach Abschluss des Vorgangs ausgeführt wird. Ein Ereignis ist tatsächlich ein Aufruf einer Ereignishandlerroutine, die Sie in Ihrer Anwendung definieren.

Wenn Sie Handlerfunktionen oder Prozeduren für die Gruppe von Ereignissen bereitstellen, die vor dem Starten des Vorgangs auftreten, können Sie die Parameter untersuchen oder ändern, die an den Vorgang übergeben wurden. Da sie noch nicht ausgeführt wurde, können Sie entweder den Vorgang abbrechen oder den Vorgang abschließen lassen.

Die Ereignisse, die nach Abschluss eines Vorgangs auftreten, sind besonders wichtig, wenn Sie ADO asynchron verwenden. Beispielsweise wird eine Anwendung, die einen asynchronen Recordset.Open Vorgang startet, durch ein abgeschlossenes Ausführungsereignis benachrichtigt, wenn der Vorgang beendet wird.

Durch die Verwendung des ADO-Ereignismodells wird Ihrer Anwendung ein größerer Aufwand hinzugefügt, bietet jedoch wesentlich mehr Flexibilität als andere Methoden für den Umgang mit asynchronen Vorgängen, z. B. das Überwachen des State Eigenschaft eines Objekts mit einer Schleife.

Anmerkung

Zum Behandeln von Ereignissen muss ADO über eine Nachrichtenpumpe verfügen oder in einem Sta-Modell (SingleThreaded Apartment) verwendet werden. ADO-Ereignisse werden intern behandelt, indem ein ausgeblendetes Fenster erstellt wird. ADO sendet Nachrichten an dieses Fenster, wenn Ereignisse ausgelöst werden müssen. Dadurch wird sichergestellt, dass Ereignisse an den Thread gesendet werden, der IConnectionPoint::Advise auf dem Verbindungspunkt aufgerufen hat. Diese Architektur kann Probleme verursachen, wenn der Thread, der die Benachrichtigungen empfangen soll, keine Fenstermeldungen pumpt. Zu den potenziellen Problemen gehören ADO-Ereignisse, die nicht an den Thread übermittelt werden, und globale Fensterübertragungen führen möglicherweise zu einer Verlangsamung des gesamten Systems, da die ausgeblendeten Fenster die Nachrichten nicht verarbeiten. STA-Threads haben in der Regel eine Nachrichtenpumpe laufen, sodass dieses Problem bei STA-Threads nicht auftritt. MTA-Threads verfügen jedoch in der Regel nicht über eine Nachrichtenpumpe, sodass sich das Problem in der Regel in MTA-Threads manifestiert.

Dieser Abschnitt enthält die folgenden Themen.

Siehe auch

ADO-Ereignishandlerzusammenfassung
Instanziierung von ADO-Ereignissen nach Sprache
ADO-Ereignisse
Ereignisparameter
Ereignistypen