Обновление связанных свойств из фонового потока - PullRequest
3 голосов
/ 25 января 2012

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

Ответы [ 3 ]

2 голосов
/ 25 января 2012

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

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

2 голосов
/ 25 января 2012

Это зависит.

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

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

2 голосов
/ 25 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...