c# - Windows 8 - 在 For 循环中异步等待时出现线程错误

标签 c# multithreading windows-8 windows-runtime

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

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

An exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll but was not handled in user code

Additional information: The application called an interface that was marshalled for a different thread. (Exception from 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;
    }

最佳答案

我认为您的 GetStoredActivitiesInFolder 有可能在非 UI 线程上返回,那么您可以修改它使其不返回,或者执行类似的操作以确保您在 UI 线程上更新 View 绑定(bind)项目,例如像那样:

await Dispatcher.RunAsync(
    CoreDispatcherPriority.High,
    () =>
    {
        AllGroups.Add(group);
    };

关于c# - Windows 8 - 在 For 循环中异步等待时出现线程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713621/

相关文章:

c# - 为什么我的表格这么害羞?

c# - 在 IIS 应用程序 (asp .net) 上使用任务/线程池

c# - 拒绝访问 PrintDialog 中的网络打印机

c# - SQLite .NET 插入 ExecuteNonQuery 返回 1

java - 我可以使用类变量将 Httpservletrequest/response 对象传递给 run() 方法吗?

php - 带有 PHP 5.4 的 WAMPSERVER 2.2 在带有 x64 处理器的 Windows 8 pro 64 位操作系统上运行缓慢

c++ - 静态 Qt 链接版本,Qt 5.2,QT : quick qml 中的未知模块

windows-8 - Windows 8 WinRT KeyboardCapabilities.KeyboardPresent 始终为真

c# - 在 ASP.NET MVC 2 Web 应用程序中输出具有 JSON 关系的 LINQ to SQL 实体时出现循环引用错误

c# - 在 C# 中,如何可靠地终止进程树