2012-01-24 7 views
2

私はViewModelのプロパティにバインドされたWPFコントロールを持っています。私の驚いたことに(これはWPFのうまく広告された機能のようには見えないので)、バックグラウンドスレッドからバウンドプロパティを変更することに問題はないようです。私のUIは例外なく更新されます。どうしてこれなの?バックグラウンドスレッドやその他の制限からバウンドプロパティを更新する際のパフォーマンス上の問題はありますか?バックグラウンドスレッドからバウンドプロパティを更新する

+0

これは、バインディングが可能な場合にディスパッチャを使用するよりも優先される理由の1つです。 –

+0

おそらくUIを変更するためにメインのUIスレッドで呼び出します – Epirocks

答えて

2

WPFは自動的にバインディングがメインスレッドで更新されるようにします。

パフォーマンスヒットはありません。何かあれば、バックグラウンドスレッドでプロパティの更新を行う方がよいでしょう。メインスレッドへの更新を送信すると、そこで実行されている作業量が増えます。 Viewだけではなく、ViewとViewModelの両方を更新することになります。差は通常無視できるはずですが、多くの更新が急激に行われている場合は、UIの応答性がより迅速に低下する可能性があります。

2

これは、WPFがバインドされたデータをUIスレッドにマーシャリングすることに注意するためです。 これは私が知る限り、スカラーデータに対してのみ機能します。コレクションについては、非UIスレッドとUIスレッドの間でコレクションを正しく管理するように注意する必要があります。

最後に、マルチスレッドで行うことと同じことをやり直す必要があります(わずかに最適化された方法かもしれません)。

1

です。

INotifyPropertyChangedを実装しているプロパティとのバインディングに対しては、これが自動的に(IIRC)実行されます。 DependencyPropertiesとDependencyObjectsはスレッドの親和性を持ち、別のスレッドから更新しようとするとスローされます。

Bindingクラスには、IsAsyncというプロパティがあります。これにより、更新によってUIがブロックされないように、別のスレッドからプロパティを更新するときに役立ちます。あなたがするまであなたは本当にそれを必要としません。

関連する問題