Parallel processing 并行进程未更新WPF集合列表
在我的WPF应用程序中,我有一个数据网格,其中填充了一个ObservableCollection集合。假设我在网格中有这样10个学生数据。每个学生都能做2个长时间运行的工作或进程,并将进程的状态更新回网格。我想同时进行这两个过程。所以我使用了Task和Parallel.Invoke方法。工作流程如下Parallel processing 并行进程未更新WPF集合列表,parallel-processing,task,Parallel Processing,Task,在我的WPF应用程序中,我有一个数据网格,其中填充了一个ObservableCollection集合。假设我在网格中有这样10个学生数据。每个学生都能做2个长时间运行的工作或进程,并将进程的状态更新回网格。我想同时进行这两个过程。所以我使用了Task和Parallel.Invoke方法。工作流程如下 我在网格中填充了学生数据收集 我点击了一个开始按钮 在start按钮的click事件中,我执行了以下代码 foreach (Student stud in StudentLists)
foreach (Student stud in StudentLists)
{
stud.Status = "started..";
Task.Factory.StartNew(() => StartProcess(stud));
}
Parallel.Invoke(() =>
{
MarkService ms = new MarkService(stud_data);
Student s = ms.GetMarkProcess(); // This will return the stud_data in the above line
Student studitem = StudentLists.Where(x => x.RollID == s.RollID).FirstOrDefault(); // find the student in the grid
if (studitem != null)
{
studitem.Status = "Mark Got it"; // if find, updating the status
}
},
() =>
{
SentMarks(poll); // this is another method to be executed parallel
}
);
在这种情况下有什么帮助吗?这里的问题是您从另一个线程引用UI控件。您应该创建一个内存中的数据结构,网格可以用作数据源(任何实现IEnumerable的东西)。我建议对并行代码()使用ConcurrentBag数据结构。更新ConcurrentBag中的每个学生记录后,将网格的数据源设置为该包