我对 CAL 和事件聚合器有一个有趣的问题。我正在尝试在应用停用或激活(application.activated 和 application.deactivated)时发布事件。我的一些模块有弹出框,当应用程序失去焦点时我想隐藏这些框。
这是下面的一个小代码示例
应用程序.xaml.cs
protected override void OnStartup(StartupEventArgs e)
{
eventAggregator.GetEvent<AppDeactivatedEvent>().Subscribe(RunIt);
Deactivated += (s, a) => eventAggregator.GetEvent<AppDeactivatedEvent>().Publish(EmptyPayload.Empty);
Deactivated += (s, a) => Console.WriteLine("Deactivated - in app.xaml");
Activated += (s, a) => eventAggregator.GetEvent<AppActivatedEvent>().Publish(EmptyPayload.Empty);
base.OnStartup(e);
}
模块.cs
ea.GetEvent<AppActivatedEvent>().Subscribe(presenter.AppDeactivated);
主持人
public void AppDeactivated(EmptyPayload empty)
{
Console.WriteLine("App Deactivated - Module");
}
发生的情况是,当应用程序失去焦点时,我在控制台中得到以下内容 Deactivated - 在 app.xaml 当应用程序重新获得焦点时,我得到以下 App Deactivated - 模块
关于为什么事件聚合器会等到应用程序重新获得焦点以触发事件的任何想法。
谢谢