流程原則的事件
有三個步驟通用於所有事件處理常式。 您將需要:
實作在物件的事件介面。
建議您事件來源的物件要接收事件。
Unadvise 事件來源,當您的物件不再需要接收事件。
您將會實作事件介面的方法取決於它的型別。 事件介面可以是雙重 vtable,或分配介面。 它是由介面所定義的事件來源的設計工具決定;它是由實作該介面的方式來決定。
注意事項 |
---|
雖然沒有事件介面不能是重複的技術原因,有一些虛擬設計理由避免使用兩倍。不過,這是 事件來源的設計工具/實作所做的決定。當您從事件 sink角度的工作,您需要考慮的情形時您可能不會有任何選項,但實作雙重介面事件。如需雙重介面的詳細資訊,請參閱 雙重介面和 ATL。 |
通知事件來源可以區分為三個步驟:
IConnectionPointContainer查詢的來源物件。
呼叫傳遞您感興趣事件介面的 IID 的 IConnectionPointContainer::FindConnectionPoint 。 如果成功,則這個方法會傳回在連接點物件的 IConnectionPoint 介面。
呼叫傳遞事件接收的 IUnknown 的 IConnectionPoint::Advise 。 如果成功,則這個方法會傳回表示連接的 DWORD Cookie。
一旦您將接收事件上成功註冊了感興趣,在物件的事件介面的方法會根據事件會引發由來源物件。 當您不再需要收到事件時,您可以將 Cookie 傳遞至連接點透過 IConnectionPoint::Unadvise。 這將會破壞來源和接收之間的連接。
在處理事件時,請小心不要參考循環。