我真的很喜欢 Prism 的 EventAggregator 为我提供松散耦合类的功能。但是现在我遇到了一个 EventAggregator 没有涵盖的问题。
因此,让我们假设我发布了消息“Test”并且目前没有该消息的订阅者。是否可以将其推迟到订户存在为止?
问候
我真的很喜欢 Prism 的 EventAggregator 为我提供松散耦合类的功能。但是现在我遇到了一个 EventAggregator 没有涵盖的问题。
因此,让我们假设我发布了消息“Test”并且目前没有该消息的订阅者。是否可以将其推迟到订户存在为止?
问候
这很容易实现。定义稍后将发布的第二条消息以及包含该消息和计时器的类:
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 容器中。