处理 ADO 事件

ADO 事件模型支持某些同步和异步 ADO 操作,它们会在操作启动之前或完成之后发出 事件或通知。 事件实际上是对应用程序中定义的事件处理程序例程的调用。

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

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

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

注意

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

本节包含以下主题。

另请参阅

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