来自 Caliburn.Micro 的 EventAggregator.PublishOnUIThread 抛出:System.InvalidOperationException:'未使用调度程序初始化'

问题描述

我正在开发 UWP 应用。我正在为 MVVM 使用 caliburn.micro 框架。 我重写了 Shellviewmodel 的 OnViewLoaded(object view) 方法,以对异步登录方法进行等待调用,如下所示:

protected async override void OnViewLoaded(object view)
{
    base.OnViewLoaded(view);
    if (GetView() is UIElement page)
    {
        page.KeyboardAccelerators.Add(_altLeftKeyboardAccelerator);
        page.KeyboardAccelerators.Add(_backKeyboardAccelerator);
    }
    await StartLoginProcess();
}
private async Task StartLoginProcess()
{
   /// validations go here
   await _eventAggregator.PublishOnUIThreadAsync(new AuthenticationFailedMessage()).ConfigureAwait(false);
}

当我尝试运行应用程序时,它抛出以下异常: exception at login

最初我认为 ConfigureAwait(false)StartLoginProcess()用法错误的,但删除它没有任何区别。

有人遇到过这种问题吗? 任何帮助将不胜感激。

解决方法

_eventAggregator.PublishOnCurrentThread(message); 解决了这个问题。我想我是从错误的上下文中调用 _eventAggregator.PublishOnUIThread(message)。它本质上需要从 UI 线程本身内部调用,而我的情况并非如此。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...