后台工作者正在更新UI线程中的模型而没有问题

时间:2013-02-27 12:43:48

标签: c# .net wpf multithreading backgroundworker

我正在使用BackgroundWorker并且已经实现了ProgressChanged方法,该方法让我可以将e.UserState传递给我的用户界面,该工作正常。

作为一项实验,我改变了我的DoWork方法,以便在绑定到UI ListView(可观察的集合)的同一模型上工作

当我这样做时,UI会更新,&我想知道为什么它经过多次测试后能够完美地完成它?

我回到使用e.UserState对象,但我想知道它是否是正常行为&什么是潜在的问题?

1 个答案:

答案 0 :(得分:2)

您当然可以毫无困难地从后台线程更改模型的属性;绑定引擎将确定需要对UI元素进行哪些更改并在调度程序线程上调用它们。这是正常的,不会导致问题。

你不能(而且永远不能)做的是直接从同一个后台线程中更改UI元素的属性。


¹这一直是可能的,事实上它不可能是任何其他方式。考虑一些代码(例如模型)需要更改另一个模型上的属性。这段代码肯定不知道该属性已被绑定到任何控件,更不用说那个控件了。因此,每次将属性更改编组到适当的UI线程不仅会带来不便,而且非常困难。