处理 ADO 事件

ADO 事件模型支持某些可在操作开始之前或在完成之后发出事件(或通知)的同步和异步 ADO 操作。 事件实际上是对应用程序中所定义的事件处理程序例程的调用。

如果为在操作开始之前发生的一组事件提供处理程序函数或过程,则可以检查或修改传递给操作的参数。 由于操作尚未执行,因此可以取消该操作或允许它完成。

如果异步使用 ADO,则在操作完成之后所发生的这组事件尤其重要。 例如,操作结束时,执行完成事件将通知启动异步 Recordset.Open 操作的应用程序。

使用 ADO 事件模型会使应用程序增加一些开销,但与其他处理异步操作的方法相比,它可提供更大的灵活性,例如,通过循环来监视对象的 State 属性。

注意

若要处理事件,ADO 需要有消息泵或在单线程单元 (STA) 模型中使用。 ADO 事件通过创建隐藏窗口在内部进行处理。 当需要触发事件时,ADO 会将消息发布到此窗口。 这样做是为了确保将事件发送到连接点上名为 IConnectionPoint::Advise 的线程。 当应接收通知的线程不抽取窗口消息时,此体系结构可能会导致问题。 潜在的问题包括 ADO 事件未传递到线程以及全局窗口广播超时,并可能减缓整个系统,因为隐藏窗口不处理消息。 STA 线程通常运行消息泵,因此此问题不会在 STA 线程上表现出来。 但是,MTA 线程通常没有消息泵,因而问题通常会在 MTA 线程上显现出来。

本部分包含以下主题。

另请参阅

ADO 事件处理程序摘要
ADO 事件实例化(按语言)
ADO 事件
事件参数
事件类型