从异步方法设置ViewModel UI属性

时间:2017-06-09 20:06:33

标签: c# mvvm uwp mvvm-light

我正在尝试从异步方法设置ViewModel List属性,但这会以以下错误结束:

  

{"应用程序调用了为不同线程编组的接口。 (来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))"}

错误很清楚。我不清楚的是克服此问题并成功设置属性的最佳方法,该属性又会更新UI。

以下尝试以对象引用未设置为对象的实例错误结束,在初始化Dispatcher时出现错误:

 private async Task DoSomething()
    {
        DispatcherHelper.Initialize();
        DispatcherHelper.CheckBeginInvokeOnUI(
          () =>
          {
           ViewModelProperty = SomeResult;
          });
    }

解决这个问题的最佳方法是什么?

更新

我最终在App.xaml.cs OnLaunched方法中全局初始化DispatcherHelper。

1 个答案:

答案 0 :(得分:2)

看起来你在后台线程中调用了DispatcherHelper.Initialize()。在这里它无权访问Dispatcher对象。

您需要在UI线程上初始化它,如documentation

中所述
  

初​​始化。应该在UI线程上调用此方法一次,以确保初始化UIDispatcher属性。