Как использовать актеры akka.net в MVVM? - PullRequest
0 голосов
/ 20 ноября 2018

Кажется, что akka.net очень просто использовать в консольном приложении или в модульных тестах.

Но я хотел опробовать некоторых актеров для простого метода входа в систему: откройте заставку, отправьте команду входа, закройте заставку, когда вход в систему будет нормальным. Теперь ответ отправляется отправителю, который является актером. Ожидание ответа на запрос Ask блокирует пользовательский интерфейс. 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. Получил бы ответ и мог бы вызвать обратные вызовы модели mainview, но дает мне InvalidOperationException "Вызов из недопустимого потока"
  3. Кажется, что единственный способ получить результат вызова

Мне интересно, как заполнить ListViews или ComboBoxes сообщениями Actor.

1 Ответ

0 голосов
/ 23 ноября 2018

По умолчанию большинство актеров akka запланированы в фоновых потоках, поэтому они не могут делать прямые обновления в пользовательском интерфейсе (это разрешено делать только пользовательскому интерфейсу / первичному потоку приложения). Если вы хотите порождать актера в потоке пользовательского интерфейса, вам необходимо настроить его на использование SynchronizedDispatcher .

...