0

私のクラスの中には、同じタイプのメッセージを送受信するものがありますが、送信したメッセージに反応しないようにしたいです。
私が今見る唯一の方法はUnregister()、メッセージを送信する前に送信者が明示的に呼び出しRegister()、メッセージが送信された後に再度呼び出すことです。これは問題ありませんが、かなりのボイラープレート コードが必要です。受信者のリストで送信者が見つかった場合、メッセンジャーが送信者を無視する
ようなものがあると便利です。Messenger.SendExceptSender(msg,sender)

IMessenger は何らかの方法でこれをサポートしていますか?

4

2 に答える 2

3

私の知る限り、それは不可能です。送信者が誰であるかさえ知らないため、インターフェースも実装もこのための機能を備えていません。

最も簡単な方法は、送信者をプロパティとしてメッセージに追加することです。これにより、ボイラープレートコードが大幅に削減され、マルチスレッドシナリオよりも安全になりRegisterますUnregister

次のようにメッセージを登録できます。

messenger.Register(this, m => {
                                  if(m.Sender == this)
                                      return;
                                  YourMessageHandler(m);
                              } );

これがコードの一般的なシナリオである場合は、そのプロパティのインターフェイスまたは基本クラスと、それを処理する拡張メソッドを作成することもできSenderます。RegisterSend

于 2012-12-12T13:41:45.823 に答える
0

メッセージにトークンを含めることができ、登録したい場所にもトークンを登録ルーチンに含めることができます。

于 2012-12-13T08:40:59.583 に答える