我正在使用BackgroundWorker并且已经实现了ProgressChanged方法,该方法让我可以将e.UserState传递给我的用户界面,该工作正常。
作为一项实验,我改变了我的DoWork方法,以便在绑定到UI ListView(可观察的集合)的同一模型上工作
当我这样做时,UI会更新,&我想知道为什么它经过多次测试后能够完美地完成它?
我回到使用e.UserState对象,但我想知道它是否是正常行为&什么是潜在的问题?
答案 0 :(得分:2)
您当然可以毫无困难地从后台线程更改模型的属性;绑定引擎将确定需要对UI元素进行哪些更改并在调度程序线程上调用它们。这是正常的,不会导致问题。
你不能(而且永远不能)做的是直接从同一个后台线程中更改UI元素的属性。
¹这一直是可能的,事实上它不可能是任何其他方式。考虑一些代码(例如模型)需要更改另一个模型上的属性。这段代码肯定不知道该属性已被绑定到任何控件,更不用说那个控件了。因此,每次将属性更改编组到适当的UI线程不仅会带来不便,而且非常困难。