Principi di gestione degli eventi
Esistono tre passaggi comuni a qualsiasi gestione degli eventi.Sarà necessario:
Implementare l'interfaccia eventi sull'oggetto.
Consigli origine evento che l'oggetto desidera ricevere gli eventi.
Unadvise origine evento quando l'oggetto non ha più ricevere eventi.
La modalità di implementare l'interfaccia eventi dipende dal tipo.Un'interfaccia eventi può essere vtable, double, o un'interfaccia dispatch.È compito della finestra di progettazione dell'origine per definire l'interfaccia; è responsabilità per implementare tale interfaccia.
[!NOTA]
Sebbene non siano tecniche motivi per cui un'interfaccia eventi non può essere suddivisa, sono disponibili numerosi buone ragioni di progettazione evitare l'utilizzo di dual.Tuttavia, questa viene presa una decisione dalla finestra di progettazione/implementatore dell'origine evento.Poiché si lavora dal punto di vista dell'evento sink, è necessario consentire la possibilità che non può essere una scelta ma implementare un'interfaccia eventi doppia.Per ulteriori informazioni sulle interfacce duali, vedere interfacce duali e ATL.
Ha origine evento può essere suddiviso in tre passaggi:
Eseguire una query l'oggetto di origine per IConnectionPointContainer.
Chiamare IConnectionPointContainer::FindConnectionPoint che passa l'iid dell'interfaccia eventi di interesse.Se l'operazione riesce, questo metodo restituirà l'interfaccia IConnectionPoint su un oggetto del punto di connessione.
Chiamare IConnectionPoint::Advise che passa IUnknown del sink di evento.Se l'operazione riesce, questo metodo restituirà il cookie DWORD che rappresentano la connessione.
Dopo aver registrato il interessati alla ricezione degli eventi, i metodi dell'interfaccia eventi dell'oggetto verranno chiamati come eventi generati dall'oggetto di origine.Quando non è più necessario ricevere eventi, è possibile passare i cookie del punto di connessione tramite IConnectionPoint::Unadvise.Questa operazione arresta la connessione tra l'origine e il sink.
Prestare attenzione a evitare i cicli di riferimento quando si gestiscono gli eventi.