У меня есть элемент управления WPF, связанный с свойствами в моей модели ViewModel. К моему удивлению (поскольку это не похоже на хорошо рекламируемую функцию WPF), похоже, нет проблем с изменением связанных свойств из фонового потока. Обновления моего пользовательского интерфейса без каких-либо исключений. Почему это? Существуют ли проблемы с производительностью при обновлении связанного свойства из фонового потока или любых других ограничений?Обновление связанных свойств из фоновой темы
ответ
WPF автоматически гарантирует, что привязки обновляются в основном потоке.
Нет удара производительности. Если что-нибудь, лучше делать обновления свойств в фоновом потоке. Отправка обновлений в основной поток увеличила бы объем выполняемой работы. Вы будете обновлять как View, так и ViewModel, а не только View. Разница обычно должна быть незначительной, но если много обновлений происходит быстро, это может привести к быстрому ухудшению характеристик пользовательского интерфейса.
Это потому, что WPF
заботится о сортировке привязанных данных к потоку пользовательского интерфейса. Это работает только для скалярных данных, насколько я знаю. Для коллекций вам необходимо позаботиться о правильном управлении им между потоками пользовательского интерфейса и пользовательского интерфейса.
Нет заметных накладных расходов, так как в конечном итоге он должен делать то же самое, что и в многопоточности (может быть немного оптимизирован).
Это зависит.
Это только «автоматически» делает это (IIRC) для привязок к свойствам, реализующим INotifyPropertyChanged. DependencyProperties и DependencyObjects имеют сходство потоков и будут бросаться, если вы попытаетесь обновить их из другого потока.
Класс Binding имеет свойство, называемое IsAsync, которое помогает в некоторых особых случаях при обновлении свойства из другого потока, так что обновление не будет блокировать пользовательский интерфейс. Вам это действительно не нужно, пока вы это сделаете.
- 1. Обновление datagridview из фоновой темы
- 2. Обновление модели GEF из фоновой темы
- 3. Обновление основного вида из фоновой темы - Swift
- 4. Обновление освобожденного UIWebView из фоновой темы
- 5. Обновление буферизованного изображения из фоновой темы
- 6. Начало деятельности из фоновой темы
- 7. Добавление представления из фоновой темы
- 8. Вызывать таймер из фоновой темы
- 9. Ждите флага из фоновой темы
- 10. Обновить таблицу из фоновой темы?
- 11. Обновление пользовательского интерфейса из фоновой темы во время события касания
- 12. Найдите основную нить из фоновой темы
- 13. Исключение из ловушки из фоновой темы
- 14. Обновление плитки из фоновой задачи
- 15. Android: поднять AlertDialog из фоновой темы
- 16. Как изменить свойства textView из фоновой темы
- 17. Диалог PopUp Android из фоновой темы
- 18. Изменение пользовательского интерфейса из фоновой темы
- 19. Показать MessageBox modaly из фоновой темы
- 20. AsyncTask: не изменен из фоновой темы
- 21. Позвоните в службу WCF из фоновой темы
- 22. WPF: выпуск обновления интерфейса из фоновой темы
- 23. Накачка конвейера какао из фоновой темы
- 24. Как вернуть данные из фоновой темы?
- 25. приложение, изменяющее механизм автозапуска из фоновой темы
- 26. Как стать резидентом. Отменить из фоновой темы.
- 27. Обновление StringGrid из темы
- 28. Обновление JFreeChart из темы
- 29. Запрос скалярных значений из основной нити managedobjectcontext из фоновой темы
- 30. Вызывающая активность изнутри фоновой темы
Это одна из причин, почему привязка предпочтительнее использовать диспетчер, когда это возможно. –
Это, вероятно, вызов Invoke в главном потоке пользовательского интерфейса для изменения пользовательского интерфейса – Epirocks