我真的很喜欢Prism的EventAggregator让我能够松散地结合我的课程。但现在我遇到了EventAggregator未涵盖的问题。
因此,让我们假设我发布了消息“测试”,目前没有此消息的订阅者。是否有可能推迟到订户存在?
此致
答案 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容器中。