在我的WPF應用程序中,我有一個數據網格,其中填充了一個ObservableCollection集合。假設我在網格中有這樣的10個學生數據。每個學生都有能力做2個長時間運行的作業或過程,並將過程的狀態更新回網格。我想同時做這兩個過程。所以我使用了Task和Parallel.Invoke方法。工作流程如下。並行進程未更新WPF收集列表
- 我填充了網格中的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個項目的最後學生數據。
它不更新網格中的確切學生對象。我的代碼有什麼問題?
在這種情況下的任何幫助???