首页 > 解决方案 > 如何在 MVVM 中使用 akka.net 的演员?

问题描述

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

但我想尝试一些演员的简单登录方法:打开闪屏,发送登录命令,登录正常时关闭闪屏。现在答案被发送给发送者,它是一个演员。等待 Ask 呼叫的应答会阻塞 UI。MainViewModel 已经派生自一个基类,因此不能将其设为演员。

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. 将收到答案并可以调用主视图模型的回调,但给我 InvalidOperationException "Call from invalid thread"
  3. 似乎是获得调用结果的唯一方法

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

标签: .netwpfxamlakka.net

解决方案


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


推荐阅读