我的一些班級發送和接收相同類型的消息,我希望他們不要對他們發送的消息做出反應。
我現在看到的唯一方法是在發送消息之前顯式發送給Unregister()
的呼叫,然後在發送消息之後再次呼叫Register()
。這很好,但它需要相當多的樣板代碼。
如果在收件人列表中發現收件人,它將忽略發件人,如Messenger.SendExceptSender(msg,sender)
。
如何不讓發件人收到它發送的郵件?
IMessenger是否支持這種方式?
我的一些班級發送和接收相同類型的消息,我希望他們不要對他們發送的消息做出反應。
我現在看到的唯一方法是在發送消息之前顯式發送給Unregister()
的呼叫,然後在發送消息之後再次呼叫Register()
。這很好,但它需要相當多的樣板代碼。
如果在收件人列表中發現收件人,它將忽略發件人,如Messenger.SendExceptSender(msg,sender)
。
如何不讓發件人收到它發送的郵件?
IMessenger是否支持這種方式?
據我所知,這是不可能的。界面和實現都沒有這方面的功能,因爲他們甚至不知道發件人是誰。
最簡單的方法是將發件人作爲屬性添加到郵件中。這將大大減少樣板代碼,並且在多線程場景下比Register
和Unregister
更安全。
你可以註冊你的消息,像這樣:
messenger.Register(this, m => {
if(m.Sender == this)
return;
YourMessageHandler(m);
});
如果這是你的代碼中常見的場景,你甚至可以創建爲Sender
性能和擴展方法的接口或基類Register
和Send
處理它。
您可以在消息中包含令牌,並且您想註冊的位置還包括註冊例程中的令牌。