0

我正在使用 BackgroundWorker 并且我实现了 ProgressChanged 方法,该方法使我可以将 e.UserState 传递给我的 UI,它可以正常工作。

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

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

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

4

1 回答 1

2

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

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


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

于 2013-02-27T12:55:16.440 回答