私はViewModelのプロパティにバインドされたWPFコントロールを持っています。私の驚いたことに(これはWPFのうまく広告された機能のようには見えないので)、バックグラウンドスレッドからバウンドプロパティを変更することに問題はないようです。私のUIは例外なく更新されます。どうしてこれなの?バックグラウンドスレッドやその他の制限からバウンドプロパティを更新する際のパフォーマンス上の問題はありますか?バックグラウンドスレッドからバウンドプロパティを更新する
2
A
答えて
2
WPFは自動的にバインディングがメインスレッドで更新されるようにします。
パフォーマンスヒットはありません。何かあれば、バックグラウンドスレッドでプロパティの更新を行う方がよいでしょう。メインスレッドへの更新を送信すると、そこで実行されている作業量が増えます。 Viewだけではなく、ViewとViewModelの両方を更新することになります。差は通常無視できるはずですが、多くの更新が急激に行われている場合は、UIの応答性がより迅速に低下する可能性があります。
2
これは、WPF
がバインドされたデータをUIスレッドにマーシャリングすることに注意するためです。 これは私が知る限り、スカラーデータに対してのみ機能します。コレクションについては、非UIスレッドとUIスレッドの間でコレクションを正しく管理するように注意する必要があります。
最後に、マルチスレッドで行うことと同じことをやり直す必要があります(わずかに最適化された方法かもしれません)。
1
です。
INotifyPropertyChangedを実装しているプロパティとのバインディングに対しては、これが自動的に(IIRC)実行されます。 DependencyPropertiesとDependencyObjectsはスレッドの親和性を持ち、別のスレッドから更新しようとするとスローされます。
Bindingクラスには、IsAsyncというプロパティがあります。これにより、更新によってUIがブロックされないように、別のスレッドからプロパティを更新するときに役立ちます。あなたがするまであなたは本当にそれを必要としません。
関連する問題
- 1. javaFXブラウザをバックグラウンドスレッドから更新する
- 2. バックグラウンドスレッドからUIを更新する
- 3. バックグラウンドスレッドからdatagridviewを更新する
- 4. Angular2 - すぐにバウンドプロパティを更新
- 5. WPFのTextBoxのバウンドプロパティ(テキストボックスから)を検索し、更新
- 6. Java JFaceデータバインディング:バックグラウンドスレッドからSWTウィジェットを更新する
- 7. UIのテキストをAndroidのバックグラウンドスレッドから更新する方法
- 8. バックグラウンドスレッドからバッファリングされたイメージを更新する
- 9. Winforms UIをバックグラウンドスレッドの結果から更新する
- 10. Observable Listをバックグラウンドスレッドから更新する正しい方法
- 11. バックグラウンドスレッドでUIProgressViewを更新
- 12. バックグラウンドスレッドからUIを変更する
- 13. EventEmitterが[(ngModel)]バウンドプロパティを更新していません
- 14. バックグラウンドスレッドでUIを更新することはできますか?
- 15. バックグラウンドスレッドからJavaFXアプリケーションのGUIを安全に更新する方法は?
- 16. バックグラウンドスレッドからUIを更新する最も一般的な方法
- 17. 参照によってバックグラウンドスレッドからTreeViewノードを更新します。
- 18. メインスレッドは、インターフェイスを更新するバックグラウンドスレッドを待っています
- 19. バックグラウンドスレッドでタイマーを使用してUIを更新する
- 20. バックグラウンドスレッドからtextViewプロパティを変更する方法
- 21. レルム - バックグラウンドスレッドでRLMResultsを一括更新する
- 22. バックグラウンドスレッドの結果を取得し、UIスレッドに更新するUWP
- 23. バックグラウンドスレッドの完了後にUIを更新する
- 24. 他のバックグラウンドスレッドからバックグラウンドスレッドを起動できますか? (NSObj)
- 25. バックグラウンドスレッドからバインドGridView
- 26. プログラムでSelectedIndexを変更したときのバウンドプロパティの変更
- 27. バックグラウンドスレッドの更新に関する通知NSView
- 28. バックグラウンドスレッドからココアメッセージループをポップする
- 29. バックグラウンドスレッドからフォアグラウンドスレッドを検索
- 30. アプリケーションはバックグラウンドスレッドからAutolayoutエンジンを変更しています
これは、バインディングが可能な場合にディスパッチャを使用するよりも優先される理由の1つです。 –
おそらくUIを変更するためにメインのUIスレッドで呼び出します – Epirocks