我正在尝试在Windows 8应用中加载已保存的数据。所有方法都是异步的。当await GetStoredActivitiesInFolder(groupFolder);
第二次在for循环中运行时,我得到一个错误,因为线程仍在处理第一个(我猜)。
错误(当我删除上面的代码行时它就消失了):
“System.Runtime.InteropServices.COMException”类型的异常 发生在mscorlib.dll中但未在用户代码中处理
附加信息:该应用程序称为接口 为不同的线程编组。 (HRESULT的例外情况:0x8001010E (RPC_E_WRONG_THREAD))
我的代码:
public async void LoadActivities()
{
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFolder activityFolder = await storageFolder.CreateFolderAsync(App.AppSettings.ActivityDirectory, CreationCollisionOption.OpenIfExists);
IReadOnlyList<StorageFolder> groupFolders = await activityFolder.GetFoldersAsync();
ObservableCollection<ActivityDataGroup> groups = new ObservableCollection<ActivityDataGroup>();
foreach (var groupFolder in groupFolders)
{
ActivityDataGroup group = new ActivityDataGroup();
group.GroupName = groupFolder.Name;
ICollection<ActivityViewModel> activities = await GetStoredActivitiesInFolder(groupFolder);
foreach (var activity in activities)
{
group.Items.Add(activity);
}
AllGroups.Add(group);
}
this.IsDataLoaded = true;
}
答案 0 :(得分:0)
我认为你的GetStoredActivitiesInFolder可能会在非UI线程上返回,然后你可以修改它,使它不会或做这样的事情,以确保你更新UI线程上的视图绑定项,例如那样:
await Dispatcher.RunAsync(
CoreDispatcherPriority.High,
() =>
{
AllGroups.Add(group);
};
答案 1 :(得分:0)
结帐此链接,它可能对您有所帮助 http://social.msdn.microsoft.com/Forums/hu/winappswithcsharp/thread/e15d4852-a601-4bd6-88b4-42480fd71e70
答案 2 :(得分:0)
以上都没有,但我随机发现了它。 LoadActivities函数在页面的构造函数中调用。当我将它移动到OnLaunched方法时,它神奇地起作用。我不知道为什么,但确实如此。 =)
无论如何,谢谢你的帮助,很抱歉打扰。