为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除 SynchronizationContext 直到我的 BackgroundWorker

如何删除 SynchronizationContext 直到我的 BackgroundWorker

C#
拉风的咖菲猫 2023-07-09 17:57:31
我正在尝试在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为您创建的临时变量的值。



查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信