我有一個綁定到ViewModel中的屬性的WPF控件。令我驚訝的是(因爲這看起來不像WPF的廣告),從後臺線程中改變綁定屬性似乎沒有問題。我的UI更新沒有例外。爲什麼是這樣?更新來自後臺線程的綁定屬性或任何其他限制時是否存在性能問題?從後臺線程更新綁定屬性
2
A
回答
2
WPF自動確保綁定在主線程上更新。
沒有性能問題。如果有什麼更好的做後臺線程上的屬性更新。將更新分派給主線程會增加在那裏完成的工作量。您將更新View和ViewModel,而不僅僅是View。差異通常應該忽略不計,但如果很多更新快速發生,那麼它可能會導致UI的響應速度更快降低。
2
這是因爲WPF
需要關注將綁定數據編組到UI線程。 這隻適用於標量數據,盡我所知。對於集合,您必須注意在非UI和UI線程之間對其進行正確管理。
沒有明顯的開銷,因爲最終它應該做同樣的事情,你會在多線程(可能會稍微更優化的方式)。
1
這取決於。
它只會「自動」執行此操作(IIRC)以實現與實現INotifyPropertyChanged的屬性的綁定。 DependencyProperties和DependencyObjects具有線程相關性,如果嘗試從另一個線程更新它們,它將拋出。
Binding類有一個名爲IsAsync的屬性,它有助於在某些特殊情況下從另一個線程更新屬性,以便更新不會阻止UI。除非你這樣做,否則你並不需要它。
相關問題
- 1. 的Windows Phone更新從後臺線程綁定
- 2. 從後臺線程綁定GridView
- 3. 更新ViewModel中新的啓動線程的可綁定屬性
- 4. Visual Basic在後臺線程上更新GUI .text屬性
- 5. 後臺線程中的WPF更新綁定
- 6. 從後臺線程更新UI控件
- 7. 從後臺更新UI線程
- 8. 從後臺線程更新BindingList <>?
- 9. 從後臺線程更新GEF模型
- 10. 從多個後臺線程更新UI
- 11. 從後臺線程更新UI
- 12. 從後臺線程更新表視圖?
- 13. 從後臺線程問題更新UI
- 14. UIProgressView更新後臺線程
- 15. 更新綁定屬性
- 16. 綁定不更新屬性
- 17. 如何從後臺線程更改textView屬性
- 18. 從後臺線程更改CALayer的屬性是否安全?
- 19. 從後臺線程更新集合中的項目屬性時出現異常
- 20. Java JFace數據綁定:從後臺線程更新SWT小部件
- 21. C#後臺線程屬性丟失
- 22. WPF確保RenderTargetBitmap已更新後臺線程更改的綁定值
- 23. 如何在更正綁定屬性後立即更新TextBox?
- 24. C#WPF。綁定屬性更改,但多線程時UI不更新
- 25. 更新孩子屬性更改時複合屬性的綁定
- 26. 後臺線程更新通知NSView
- 27. canvas未實時更新後臺線程
- 28. wpf後臺線程更新UI控制
- 29. 使用綁定屬性更新UserControl UI
- 30. 更新靜態屬性的綁定
這就是爲什麼在可能的情況下綁定優先於使用調度程序的原因之一。 –
它可能是調用主UI線程上的Invoke來更改UI – Epirocks