Как выполняются конвертеры WPF?

Я сталкиваюсь с проблемами рендеринга в очень сложном пользовательском интерфейсе WPF, который содержит, среди прочего, множество преобразователей (IValueConverter, IMultiValueConverter).

Я хотел бы знать, могут ли преобразователи быть вовлечены в это.

Кто-нибудь знает, как работают конвертеры WPF? Выполняются ли они параллельно, а затем синхронизируются с потоком пользовательского интерфейса? или есть какой-то цикл foreach, который обрабатывает каждый конвертер?


person Alexandre Lemaire    schedule 28.07.2011    source источник


Ответы (1)


Преобразователи выполняются в потоке пользовательского интерфейса, вы можете проверить это, заблокировав поток, используя что-то вроде Thread.Sleep(10000). Пользовательский интерфейс управляется в очереди диспетчера. Дополнительную информацию см. в справочнике по модели многопоточности. привязки помещаются в эту очередь. Преобразователи вызываются, если привязка была обновлена, обычно они не вызываются одновременно.

(Также смотрите хорошие комментарии ниже)

person H.B.    schedule 28.07.2011
comment
+1, Красиво сформулировано. Я также хотел бы добавить, что если у вас есть конвертер, выполнение которого занимает много времени, он заблокирует пользовательский интерфейс, поскольку да, он находится в потоке пользовательского интерфейса. - person Ed Bayiates; 29.07.2011
comment
+1, хорошее объяснение. В качестве примечания: преобразователи выполняются в потоке пользовательского интерфейса, даже если привязка является асинхронной (IsAsync=True). Значение свойства извлекается асинхронно из источника, затем преобразователь выполняется синхронно в потоке пользовательского интерфейса. - person Thomas Levesque; 29.07.2011
comment
@ThomasLevesque: я думал о том, чтобы добавить это, так как это совсем не интуитивно понятно, хороший момент. - person H.B.; 29.07.2011
comment
+1 За очень информативный ответ и отличную (и интересную) ссылку на модель потоков. - person Carlo; 29.07.2011