Windows 8 App该应用程序称为为不同线程编组的接口

时间:2013-02-11 03:40:41

标签: winrt-xaml

我正在使用c#/ XAML处理Windows 8应用程序。一切都在工作,除了这个事件处理程序,我在这一行得到以下错误。

await RefreshUserInfoAsync();

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

此Observable Collection正在从app类中的推送通知处理程序更新,此事件处理程序位于我的视图模型中。我没有使用像MVVM Light这样的任何框架。我查看了其他一些帖子,并尝试创建自己的Dispatcher Helper但是我收到了一个不同的错误,其中Window.Current.Dispatcher为null。任何想法如何使这项工作?

    private async void PushActions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        string action = e.NewItems[0] as string;
        if(action != null)
        {
             await RefreshUserInfoAsync();
        }
    }


    private async Task RefreshUserInfoAsync()
    {
        var userInfos = await SessionRepository.GetSessionUsersWithInfoAsync(SessionGuid, RoundGuid);
        this.UserInfoList = new ObservableCollection<UserInfo>(userInfos);
    }

private async void PushActions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { string action = e.NewItems[0] as string; if(action != null) { await RefreshUserInfoAsync(); } } private async Task RefreshUserInfoAsync() { var userInfos = await SessionRepository.GetSessionUsersWithInfoAsync(SessionGuid, RoundGuid); this.UserInfoList = new ObservableCollection<UserInfo>(userInfos); }

强调文字

1 个答案:

答案 0 :(得分:18)

我与Jeffrey Richter交谈,他给了我答案。从View Model,我可以通过CoreApplication.MainView.CoreWindow访问Dispatcher。

以下是更新:

var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;

await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {
    this.UserInfoList = new ObservableCollection<UserInfo>(userInfos);
});

我希望这有助于其他人。

麦克