2011-07-28 20 views
3

多くのコンバーター(IValueConverter、IMultiValueConverter)を含む非常に複雑なWPF UIのレンダーに関する問題に直面しています。WPFコンバーターはどのように実行されますか?

コンバータがこれに関与できるかどうかを知りたいと思います。

WPFコンバーターの仕組みを知っている人はいますか? これらは並列で実行されてから、UIスレッドと同期されますか?またはすべてのコンバータを扱うforeachループのようなものがありますか?

答えて

8

コンバータはUIスレッドで実行されますが、これはThread.Sleep(10000)のようなものを使用してスレッドをブロックすることでテストできます。 UIはディスパッチャキューで管理されます。詳細はthreading model referenceを参照してください。バインディングの更新はそのキューにプッシュされます。バインディングが更新された場合はコンバーターが呼び出され、通常は同時に呼び出されません。

(以下も良いのコメントを参照)

+1

+1、素敵な言葉で表現。また、実行するのに時間がかかるコンバータを使用している場合は、UIスレッドを使用しているため、UIがブロックされることを追加したいと思います。 –

+1

+1、良い説明。補足として:バインディングが非同期*(IsAsync = True)であっても、コンバータはUIスレッド*上で実行されます。プロパティ値はソースから非同期に取得され、コンバータはUIスレッドで同期して実行されます。 –

+0

@ThomasLevesque:私はそれが直感的ではないので、これを追加することをお勧めします。 –

関連する問題