1

我正在为 Windows phone silverlight 应用程序创建一个简单的消息传递系统。

这个想法是各种 xaml 页面和其他对象将订阅一个消息传递对象,传递他们想要接收/处理的消息类型和一个 Action<> Delegate 作为处理程序。

当一个动作发生时,一条消息(带有有效负载)将被发送给正确的订阅者。

这是我想要的消息类的快速草稿。

public class MessageBus
{
    private List<Subscriber> subscribers;

    public MessageBus()
    {
        subscribers = new List<Subscriber>();
    }

    public void Subscribe(string messageType, Action<object>subscriber){
        subscribers.Add(new Subscriber(messageType, subscriber));
    }

    public void SendMessage(object message, string messageType)
    {
        foreach (Subscriber subscriber in subscribers)
        {
            if (subscriber.MessageType == messageType && subscriber.Reciever  != null)
            {
                subscriber.Reciever(message);
            }
        }
    }

}

public class Subscriber
{
    public string MessageType { get; set; }
    public Action<object> Reciever { get; set; }

    public Subscriber(string messageType, Action<Object> reciever)
    {
        MessageType = messageType;
        Reciever = reciever;
    }

}

因此,各种订阅者将为自己添加一个类型,Action。据我了解,这将阻止原始页面/对象被垃圾收集(我认为它会是其他情况?)因为对它的引用将始终存在。

我无法真正取消订阅,或者并非总是如此,并且消息队列将在应用程序的整个生命周期内一直存在。

我应该实施 WeakReferences 吗?如果是,如何实施?

WeakReferences 会增加更多开销吗?

考虑到这一点,我是否疯了,因为正在使用的内存很小?

4

1 回答 1

0

MVVM Light 工具包有一个奇妙的松耦合消息总线,它可用于 WP7 http://www.galasoft.ch/mvvm/getstarted/

你可能需要这个:http: //blog.galasoft.ch/archive/2010/07/22/mvvm-light-hotfix-for-windows-phone-7-developer-tools-beta.aspx

于 2010-07-28T11:31:33.273 回答