給定的錯誤訊息,「這種類型CollectionView 不支援從與Dispatcher 執行緒不同的執行緒變更其SourceCollection”,表示嘗試從非UI 執行緒修改ObservableCollection。
如提供的程式碼所述,ViewModel 的 Load( ) 方法從 GetMatchDetailsDC 物件清單中填入 _matchObsCollection ObservableCollection。但是,此更新是在 UI 執行緒之外執行的。
在 WPF 中,UI 元素(例如 DataGrid)是在 UI 執行緒上建立的,並維護一個執行緒親和力。對這些元素的任何修改都必須從 UI 執行緒執行,以確保執行緒安全。
要解決此問題,您可以使用App.Current.Dispatcher.Invoke(( Action)delegate { ... }) 方法在UI 執行緒上呼叫集合更新:
matchList = proxy.GetMatch().ToList();
foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
App.Current.Dispatcher.Invoke((Action)delegate // WPF 中的非同步資料載入
雖然使用非同步方法載入資料很常見,但從非 UI 執行緒操作 UI 元素時考慮執行緒安全性非常重要。請務必確保對 UI 元素的任何更新(例如修改 ObservableCollection)都在 UI 執行緒上執行,以避免與執行緒相關的錯誤。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3