に接続しようとしinterface.MessageReceived
ていlogger.LogReceivedMessage
ます。interface.MessageReceived += LogReceivedMessage; を追加すると、inlogger
のコンストラクターLogReceivedMessage
は、期待どおりに呼び出されます。
ただし、フックアップを 内の別の場所に移動するとlogger
、LogReceivedMessage
は呼び出されません。
他のすべてのフックアップはinterface.MessageReceived
使用する必要がありますが、それは問題では+=
ありませ=
ん。
ウォッチ ウィンドウと Visual Studio の [オブジェクト ID の作成] オプションを使用して、コードがinterface
両方の場所で同じインスタンスを持っていることを確認しました。します。ただし、interface.MessageReceived
コンストラクターには、コード内の他の場所とは異なるオブジェクトがあります。実際、何かを接続するたびに変化するようです。それが期待されているかどうかはわかりません。
コンストラクターでのみハンドラーを接続できる理由は誰にもありますか?
編集:
動作するようになりましたが、なぜ動作するのかわかりません。interface
クラスの元のコード:
public event Action<Message> MessageReceived;
busClient.MessageReceived += MessageReceived
私はそれを次のように変更しました:
public event Action<Message> intermediateMessageReceived;
public event Action<Message> MessageReceived;
busClient.MessageReceived += intermediateMessageReceived;
public void intermediateMessageReceived(Message m)
{
MessageReceived(m);
}
プロジェクト全体にすべてのコードを投稿せずに、なぜこれが異なる動作をするのか誰にもわかりませんか?