處理 ADO 事件
ADO 事件模型支援在作業開始或完成之前發出事件或通知的特定同步和非同步 ADO 作業。 事件實際上是呼叫您在應用程式中定義的事件處理常式。
如果您為作業開始前發生的事件群組提供處理常式函式或程式,則可以檢查或修改傳遞給作業的參數。 因為尚未執行,所以您可以取消作業,或允許作業完成。
當您以非同步方式使用 ADO 時,作業完成之後所發生的事件特別重要。 例如,啟動非同步 Recordset.Open 作業的應用程式會在作業結束時收到執行完成事件通知。
使用 ADO 事件模型會對您的應用程式增加一些額外負荷,但能夠提供比其他處理非同步作業方法更多的彈性,例如使用迴圈監視物件的 State 屬性。
注意
若要處理事件,ADO 必須有訊息幫浦,或用於單一執行緒 Apartment (STA) 模型。 ADO 事件會透過建立隱藏視窗在內部處理。 當需要引發事件時,ADO 會將訊息張貼至此視窗。 這麼做可確保事件會傳送至在連接點上呼叫 IConnectionPoint::Advise 的執行緒。 當應該接收通知的執行緒不會幫浦視窗訊息時,此架構可能會造成問題。 潛在的問題包括未傳遞至執行緒的 ADO 事件和全域視窗廣播逾時,而且可能會讓整個系統變慢,因為隱藏的視窗不會處理訊息。 STA 執行緒通常會有訊息幫浦執行,因此此問題不會在 STA 執行緒上自行顯示。 不過,MTA 執行緒通常沒有訊息幫浦,因此問題通常會在 MTA 執行緒上顯示。
此章節包含下列主題。