私の WPF アプリケーションには、ObservableCollection コレクションを取り込むデータ グリッドがあります。グリッドにそのような 10 人の学生データがあるとします。各生徒は、2 つの長時間実行される作業またはプロセスを実行でき、プロセスのステータスをグリッドに更新します。これらの2つのプロセスを同時に実行したい。そこで、Task メソッドと Parallel.Invoke メソッドを使用しました。ワークフローは次のとおりです。
- グリッドに Student データ コレクションを作成しました。
- スタートボタンをクリックしました。
スタートボタンのクリックイベントで、以下のコードを実行しました。
foreach (Student stud in StudentLists) { stud.Status = "started.."; Task.Factory.StartNew(() => StartProcess(stud)); }
StartProcess では、
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 項目すべての最後の生徒のデータが含まれていることがあります。
グリッド内の正確な学生オブジェクトを更新していません。私のコードで何が間違っていますか?
この場合の助けはありますか???