0

我真的很喜欢 Prism 的 EventAggregator 为我提供松散耦合类的功能。但是现在我遇到了一个 EventAggregator 没有涵盖的问题。

因此,让我们假设我发布了消息“Test”并且目前没有该消息的订阅者。是否可以将其推迟到订户存在为止?

问候

4

1 回答 1

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 容器中。

于 2013-09-03T14:42:06.690 回答