我正在使用 c#/XAML 开发 Windows 8 应用程序。除了这个事件处理程序之外,一切都正常工作,我在这一行收到以下错误。
await RefreshUserInfoAsync();
应用程序调用了为不同线程编组的接口。 (HRESULT 异常:0x8001010E (RPC_E_WRONG_THREAD))
此可观察集合正在从应用程序类中的推送通知处理程序进行更新,并且此事件处理程序位于我的视图模型中。我没有使用任何像 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);
}
我与杰弗里·里克特 https://rads.stackoverflow.com/amzn/click/com/0735667454他给了我答案。从视图模型中,我可以通过 CoreApplication.MainView.CoreWindow 访问调度程序。
这是更新:
var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {
this.UserInfoList = new ObservableCollection<UserInfo>(userInfos);
});
我希望这对其他人有帮助。
Mike
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)