我正在尝试在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);
};
慕的地10843
相关分类