ADO イベントの処理
ADO イベント モデルは、操作の開始前または完了後に、イベントまたは通知を発行する特定の同期および非同期 ADO 操作をサポートします。 イベントは、実際には、アプリケーションで定義するイベント ハンドラー ルーチンの呼び出しです。
操作の開始前に発生するイベントのグループにハンドラー関数またはプロシージャを指定する場合は、操作に渡されたパラメーターを調べたり変更したりできます。 まだ実行されていないため、操作を取り消すか、完了を許可することができます。
操作の完了後に発生するイベントは、ADO を非同期的に使用する場合に特に重要です。 たとえば、非同期の Recordset.Open 操作を開始するアプリケーションは、操作が終了すると、実行完了イベントによって通知されます。
ADO イベント モデルを使用すると、アプリケーションにオーバーヘッドが発生しますが、ループを使用してオブジェクトの State プロパティを監視するなど、非同期操作を処理する他の方法よりもはるかに柔軟性が高くなります。
手記
イベントを処理するには、ADO にメッセージ ポンプを用意するか、シングル スレッド アパートメント (STA) モデルで使用する必要があります。 ADO イベントは、非表示ウィンドウを作成することによって内部的に処理されます。 ADO は、イベントを発生させる必要があるときに、このウィンドウにメッセージを投稿します。 これは、接続ポイントで IConnectionPoint::Advise 呼び出されたスレッドにイベントが確実に送信されるようにするために行われます。 このアーキテクチャでは、通知を受け取るスレッドがウィンドウ メッセージをポンプしない場合に問題が発生する可能性があります。 潜在的な問題には、スレッドに配信されていない ADO イベントやグローバル ウィンドウブロードキャストがタイムアウトし、非表示のウィンドウがメッセージを処理しないためにシステム全体が遅くなる可能性があります。 STA スレッドには通常、メッセージ ポンプが実行されているため、この問題は STA スレッドに現れません。 ただし、MTA スレッドには通常メッセージ ポンプがないため、通常は MTA スレッドで問題が発生します。
このセクションには、次のトピックが含まれています。
関連項目
ADO イベント ハンドラーの概要
言語による ADO イベントのインスタンス化
ADO イベント
イベント パラメーターの
イベントの種類