.net - 如何在 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"));
}
- 直接打电话给负责的演员,答案是发送给死信。还有更复杂的例子吗?
- 将收到答案并可以调用主视图模型的回调,但给我 InvalidOperationException "Call from invalid thread"
- 似乎是获得调用结果的唯一方法
我想知道如何通过 Actor 消息填充 ListViews 或 ComboBoxes。
解决方案
默认情况下,大多数 akka actor 都安排在后台线程中,因此它们无法直接更新 UI(仅允许应用程序的 UI/主线程执行此操作)。如果你想在 UI 线程上生成一个 actor,你需要将它配置为使用SynchronizedDispatcher。
推荐阅读
- spring-kafka - 如何使 Spring-remoting 在 Kafka 上工作?
- javascript - 滚动条上的标头给出了混蛋首次亮相主题shopify
- csv - 使用批处理文件删除列 .CSV 中的单词
- python - 在请求级别使用 Dataloader (graphene + tornado-graphql)
- javafx - 如何在 Scene Builder 中设置首选版本?
- html - 为什么切换 1 像素边框会创建一个 75 像素的溢出与固定位置的标题和 flex 增长?
- python - 似乎尽管导入了正确的库和模块,但 pycharm 仍然无法识别该库
- ios - 在 react-native 中打开键盘时,ScrollView 无法滚动到底部。[IOS]
- c++ - 为什么函数 cleanup_str 必须用“静态”关键字限定?
- java - 如何在 JPA QUERY DSL 中使用“from”子查询?