Синхронизация ReactiveUI Вызов ReactiveCommand вызывает System.InvalidOperationException - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь связать простую синхронную команду с ReactiveUI.

public ICommand ClickCommand { get; set; }

public bool IsClicked;

public MainViewModel()
{
    ClickCommand = ReactiveCommand.Create(OnClick);
}

private void OnClick()
{
    //just example of fast action   
    IsClicked = true;
}

Но когда я вызываю ее, я получаю ошибку:

System.InvalidOperationException: вызывающий поток не можетдоступ к этому объекту, так как владельцем этого объекта является другой поток

В стеке вызовов я вижу, что он о System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute ().Как я могу избежать изменений ReactiveCommand.CanExecute или заставить его вызывать в потоке пользовательского интерфейса?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

У меня была такая же проблема в течение нескольких недель. Моё исключение было выброшено, когда пункт меню пытался обновить его состояние (ReactiveCommand привязан к пункту меню).

Добавление ReactiveUI.WPF в проект решило проблему.

0 голосов
/ 12 сентября 2018

Хотелось бы, чтобы было лучшее сообщение об ошибке.Попробуйте добавить пакет ReactiveUI.WPF в ваш проект.Он содержит ряд связанных с WPF пакетов потоков, зарегистрированных в системе инверсии зависимостей ReactiveUI.Вы также найдете эту информацию на шаге 2 документации по началу работы .Удачного кодирования!

...