0

私はBackgroundWorkerとiveで実装されたProgressChangedメソッドを使用しています。これにより、e.UserStateをUIに渡すことができます。これは正常に機能します。

実験として、UI ListView(Observable Collection)にバインドされているのと同じモデルで動作するようにDoWorkメソッドを変更しました

これを行うとUIが更新されますが、多くのテストを行った後、なぜ問題なくUIを実行できるのでしょうか。

e.UserStateオブジェクトの使用に戻りますが、それが正常な動作であるかどうか、および潜在的な問題は何ですか?

4

1 に答える 1

2

モデルのプロパティは、問題なくバックグラウンドスレッドから確実に変更できます。バインディングエンジンは、UI要素にどのような変更を加える必要があるかを判断し、ディスパッチャースレッド¹でそれらを呼び出します。これは正常であり、問​​題は発生しません。

同じバックグラウンドスレッドからUI要素のプロパティを直接変更することはできません(そして決してできません)。


¹これは常に可能であり、実際、他の方法では不可能でした。一部のコード(モデルなど)が別のモデルのプロパティを変更する必要があることを考慮してください。このコードは、プロパティが任意のコントロールにバインドされていること、ましてやどのコントロールにバインドされているかを確実に知ることはできません。したがって、不便であるだけでなく、プロパティの変更を毎回適切なUIスレッドにマーシャリングすることは非常に困難です。

于 2013-02-27T12:55:16.440 に答える