我正在使用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); }
答案 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);
});
我希望这有助于其他人。
麦克