我正在嘗試在BackgroundWorker線程中下載一些電影數據,但是當后臺線程嘗試修改ObservableCollection所選電影的字段時,出現錯誤,指出“這種類型的 CollectionView 不支持從與 Dispatcher 不同的線程更改其 SourceCollection線”。首先,我嘗試刪除任何 UI 元素,例如TextBoxes在運行之前BackgroundWorker,奇怪的是,即使沒有留下任何對象來同步更改,這似乎也不起作用。我可以通過使用此處的答案將更改發送到 UI 線程來解決此問題,但這意味著我必須用許多行淹沒我的后臺線程,uiContext.Send(x => _matchObsCollection.Add(match), null);這會使我的代碼比我想要的更混亂。理想情況下,我想刪除 SynchronizationContext,以便 UI 線程不會嘗試干擾后臺線程,但這又沒有任何區別。我在這里嘗試做的事情有問題嗎:// Prevent synchronization with the UI thread.var uiContext = SynchronizationContext.Current;SynchronizationContext.SetSynchronizationContext(null);// Prepare the background worker for data download tasks.BackgroundThread = new BackgroundWorker();BackgroundThread.WorkerReportsProgress = true;BackgroundThread.ProgressChanged += BackgroundThread_ProgressChanged;BackgroundThread.DoWork += (f, arg) =>{ DownloadMovieData(movie, uiContext);};
1 回答

慕的地10843
TA貢獻1785條經驗 獲得超8個贊
您可以嘗試將函數的結果存儲DownloadMovieData
在臨時變量上,并向RunWorkerCompleted
后臺工作人員添加一個事件,以將實際值設置ObservableCollection
為您創建的臨時變量的值。
- 1 回答
- 0 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消