我正在尝试在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 关注
- 104 浏览
添加回答
举报
0/150
提交
取消