如何在MVVM中使用akka.net的参与者?

时间:2018-11-19 21:03:29

标签: .net wpf xaml akka.net

在控制台应用程序或单元测试中使用akka.net似乎很容易。

但是我想尝试一些简单的登录方法的参与者:打开启动画面,发送登录命令,在登录正常后关闭启动画面。现在,答案将发送给演员。等待Ask呼叫的答案将阻止UI。 MainViewModel已经从基类派生,因此使其成为actor并不是一种选择。

public void OnStartupCommand(EventArgs args)
{
    _splashScreen = new SplashScreenView();
    _splashScreen.Show();
    // [1]
    _actorSystem.ActorSelection("/user/system").Tell(new Login("Me"));
    // [2]
    var mainWindowActor =_actorSystem.ActorOf(Props.Create(() => new 
    MainWindowActor(this)), "mainwindow");
    mainWindowActor.Tell(new Login("me"));
    // [3]
    var result = await _actorSystem.ActorSelection("/user/system").Ask(new Login("me")); 
}
  1. 直接致电责任演员,答案发送给死信。还有更复杂的例子吗?
  2. 将收到答案并可以调用mainviewmodel的回调,但是会给我InvalidOperationException“从无效线程中调用”
  3. 似乎是获得通话结果的唯一方法

我想知道如何通过Actor消息填充ListViews或ComboBox。

1 个答案:

答案 0 :(得分:0)

默认情况下,大多数akka actor安排在后台线程中,因此它们无法在UI上进行直接更新(仅允许应用程序的UI /主线程执行此操作)。如果要在UI线程上生成actor,则需要将其配置为使用SynchronizedDispatcher