我正在嘗試在BackgroundWorker線程中下載一些電影數(shù)據(jù),但是當(dāng)后臺線程嘗試修改ObservableCollection所選電影的字段時,出現(xiàn)錯誤,指出“這種類型的 CollectionView 不支持從與 Dispatcher 不同的線程更改其 SourceCollection線”。首先,我嘗試刪除任何 UI 元素,例如TextBoxes在運行之前BackgroundWorker,奇怪的是,即使沒有留下任何對象來同步更改,這似乎也不起作用。我可以通過使用此處的答案將更改發(fā)送到 UI 線程來解決此問題,但這意味著我必須用許多行淹沒我的后臺線程,uiContext.Send(x => _matchObsCollection.Add(match), null);這會使我的代碼比我想要的更混亂。理想情況下,我想刪除 SynchronizationContext,以便 UI 線程不會嘗試干擾后臺線程,但這又沒有任何區(qū)別。我在這里嘗試做的事情有問題嗎:// 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);};
如何刪除 SynchronizationContext 直到我的 BackgroundWorker
拉風(fēng)的咖菲貓
2023-07-09 17:57:31