EventAggregator推迟发送消息供以后使用

时间:2013-09-03 14:14:35

标签: c# prism eventaggregator

我真的很喜欢Prism的EventAggregator让我能够松散地结合我的课程。但现在我遇到了EventAggregator未涵盖的问题。

因此,让我们假设我发布了消息“测试”,目前没有此消息的订阅者。是否有可能推迟到订户存在?

此致

1 个答案:

答案 0 :(得分:1)

这很容易实现。定义稍后将发布的第二条消息以及包含该消息和计时器的类:

public class OriginalMessage : CompositePresentationEvent<OriginalArgs> { }
public class MyDelayedMessage : CompositePresentationEvent<MyEventArgs> { }

public class DelayedMessage {
    EventAggregator _bus;
    OriginalMessage _msg;
    DispatcherTimer _timer;
    OriginalArgs _args;

    public DelayedMessage(
        EventAggregator bus,
        OriginalMessage sourceMessage,
        OriginalArgs args,
        TimeSpan delay
    ) {
        _bus = bus;
        _args = args;
        _msg = sourceMessage;
        _timer = new DispatcherTimer();
        _timer.Interval = delay;
        _timer.Tick += OnTimerTick;
    }

    void OnTimerTick(object sender, EventArgs args) {

        _bus.GetEvent<MyDelayedMessage>().Publish(_args);
    }
}

您需要一个上下文来放置此对象以保持它。您可以将其作为私有字段放到主机IU容器中。