在我的 WPF 应用程序中,我有一个使用 ObservableCollection 集合填充的数据网格。假设我在网格中有这样的 10 个学生数据。每个学生都能够进行 2 项长时间运行的工作或流程,并将流程的状态更新回网格。我想同时进行这两个过程。所以我使用了 Task 和 Parallel.Invoke 方法。工作流程如下。
- 我在网格中填充了学生数据集合。
- 我点击了一个开始按钮。
在开始按钮的单击事件中,我执行了以下代码。
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 } );
当执行所有 10 个学生的过程时,网格中的每个学生都变成了相同的数据。或者网格中只有 2 或 1 名学生显示状态“Mark Got it”。其他行仅显示“已开始..”状态。
为什么这不更新集合。
我使用了 INotofyPropertyChanged 并在属性更新时引发了事件。在 XAML 中,每个绑定都以双向模式使用。
没有错误。但是学生收藏中的 1 或 2 个项目有时会更新。有时,该集合包含所有 9 个项目的最后一个学生数据。
它不会更新网格中的确切学生对象。我的代码有什么问题?
在这种情况下有什么帮助???