次の方法で共有


イベント処理の原則

すべてのイベント処理に共通する手順が 3 つあります。 次のことを行う必要があります。

  • オブジェクトにイベントインターフェイスを実装する。

  • オブジェクトがイベントを受け取る必要があることをイベント ソースに通知する。

  • オブジェクトがイベントを受け取る必要がなくなったときに、イベント ソースの通知を解除する。

イベント インターフェイスを実装する方法は、その型によって異なります。 イベント インターフェイスは、vtable、デュアル、またはディスパッチ インターフェイスにすることができます。 インターフェイスを定義するのは、イベント ソースのデザイナーの責任であり、そのインターフェイスを実装するのはユーザーの責任です。

Note

イベント インターフェイスをデュアルにすることはできないという技術的な理由はありませんが、デュアルの使用を避けるために十分な設計上の理由がいくつかあります。 ただし、これはイベント "ソース" のデザイナーまたは実装者により決断されることです。 ユーザーは、イベント sink の観点から作業しているため、デュアル イベント インターフェイスを実装する以外に選択肢がないという可能性を考慮する必要があります。 デュアル インターフェイスの詳細については、「デュアル インターフェイスと ATL」をご覧ください。

イベント ソースの通知は、次の 3 つの手順に分けることができます。

イベントの受信に対する関心が正常に登録されると、オブジェクトのイベント インターフェイスのメソッドが、ソース オブジェクトによって発生したイベントに従って呼び出されます。 イベントを受け取る必要がなくなった場合は、IConnectionPoint::Unadvise を経由して Cookie をコネクション ポイントに返すことができます。 これにより、ソースとシンク間の接続が切断されます。

イベントを処理するときは、参照サイクルを避けるようにご注意ください。

関連項目

イベント処理