2

我正在尝试在我的 Windows 8 应用程序中加载保存的数据。所有方法都是异步的。当await GetStoredActivitiesInFolder(groupFolder);第二次在 for 循环中运行时,我得到一个错误,因为线程仍在处理第一个(我猜)。

错误(当我删除上面的代码行时它消失了):

mscorlib.dll 中出现“System.Runtime.InteropServices.COMException”类型的异常,但未在用户代码中处理

附加信息:应用程序调用了为不同线程编组的接口。(来自 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;
    }
4

2 回答 2

0

我认为您的 GetStoredActivitiesInFolder 可能会在非 UI 线程上返回,然后您可以对其进行修改以使其不返回或执行类似操作以确保您更新 UI 线程上的视图绑定项,例如:

await Dispatcher.RunAsync(
    CoreDispatcherPriority.High,
    () =>
    {
        AllGroups.Add(group);
    };
于 2012-10-03T18:23:12.690 回答
0

以上都不起作用,但我偶然发现了它。在页面的构造函数中调用了 LoadActivities 函数。当我将它移到 OnLaunched 方法时,它神奇地起作用了。我不知道为什么,但确实如此。=)

无论如何,感谢您的帮助,抱歉打扰。

于 2012-10-04T19:55:38.877 回答