に接続しようとし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);
}
プロジェクト全体にすべてのコードを投稿せずに、なぜこれが異なる動作をするのか誰にもわかりませんか?