2012-01-24 2 views
2

У меня есть элемент управления WPF, связанный с свойствами в моей модели ViewModel. К моему удивлению (поскольку это не похоже на хорошо рекламируемую функцию WPF), похоже, нет проблем с изменением связанных свойств из фонового потока. Обновления моего пользовательского интерфейса без каких-либо исключений. Почему это? Существуют ли проблемы с производительностью при обновлении связанного свойства из фонового потока или любых других ограничений?Обновление связанных свойств из фоновой темы

+0

Это одна из причин, почему привязка предпочтительнее использовать диспетчер, когда это возможно. –

+0

Это, вероятно, вызов Invoke в главном потоке пользовательского интерфейса для изменения пользовательского интерфейса – Epirocks

ответ

2

WPF автоматически гарантирует, что привязки обновляются в основном потоке.

Нет удара производительности. Если что-нибудь, лучше делать обновления свойств в фоновом потоке. Отправка обновлений в основной поток увеличила бы объем выполняемой работы. Вы будете обновлять как View, так и ViewModel, а не только View. Разница обычно должна быть незначительной, но если много обновлений происходит быстро, это может привести к быстрому ухудшению характеристик пользовательского интерфейса.

2

Это потому, что WPF заботится о сортировке привязанных данных к потоку пользовательского интерфейса. Это работает только для скалярных данных, насколько я знаю. Для коллекций вам необходимо позаботиться о правильном управлении им между потоками пользовательского интерфейса и пользовательского интерфейса.

Нет заметных накладных расходов, так как в конечном итоге он должен делать то же самое, что и в многопоточности (может быть немного оптимизирован).

1

Это зависит.

Это только «автоматически» делает это (IIRC) для привязок к свойствам, реализующим INotifyPropertyChanged. DependencyProperties и DependencyObjects имеют сходство потоков и будут бросаться, если вы попытаетесь обновить их из другого потока.

Класс Binding имеет свойство, называемое IsAsync, которое помогает в некоторых особых случаях при обновлении свойства из другого потока, так что обновление не будет блокировать пользовательский интерфейс. Вам это действительно не нужно, пока вы это сделаете.

Смежные вопросы