.NET Update WPF Control в собственном потоке пользовательского интерфейса - PullRequest
1 голос
/ 27 сентября 2010

У меня есть приложение реального времени, которое постоянно обновляет журнал пользовательского интерфейса (элемент управления RichTextBox) в виде элемента управления ListView. Элемент управления обновляется текущими данными приложения, полученными через события. Мое приложение работало очень медленно, и я обнаружил, что это связано с обновлением журнала ListView, который блокирует поток пользовательского интерфейса. Как вы можете себе представить, приложение выглядит крайне невосприимчивым к пользователю.

Я знаю, что можно запустить окно WPF в своем собственном потоке пользовательского интерфейса. Мне было интересно, возможно ли разместить элемент управления WPF в его собственном потоке пользовательского интерфейса, чтобы основной поток пользовательского интерфейса обновлял оставшуюся часть окна без блокировки?

Если это невозможно, пожалуйста, порекомендуйте альтернативные способы устранения этой дилеммы.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2010

RichTextBox - дорогостоящий элемент управления для регулярного обновления.

Невозможно разместить элемент управления WPF в своем потоке пользовательского интерфейса.

ObservableCollection не будет работать в моем случае, как яу меня нет прямого доступа к объектам, которые я связываю - сторонние объекты.

Мое решение, которое требует минимальных изменений, заключалось в том, чтобы основать элемент управления журналом пользовательского интерфейса на ListView.ListView оптимизирован для массовых и регулярных обновлений - благодаря тегу VirtualisedStackPanel.

0 голосов
/ 27 сентября 2010

Вы не опубликовали код, но почему бы вам не связать ListView с ObservableCollection?Вы обновляете коллекцию, и она вызывает событие, сообщающее пользовательскому интерфейсу, что он изменился - именно он обновит пользовательский интерфейс.

Существует множество учебных пособий о том, как это сделать, - один такой можно найти на SwitchПо коду

...