Запуск события из таймера в интерфейс WPF - PullRequest
2 голосов
/ 05 июня 2010

У меня есть приложение, которое состоит из пользовательского интерфейса WPF с уровнем «инфраструктуры», который имеет ссылки на различные сервисы с данными.У меня есть класс Updater, у которого есть пара свойств, представляющих данные, которые будут использоваться уровнем пользовательского интерфейса.Этот модуль обновления имеет функцию Systems.Timer, которая позволяет каждую минуту или около того выполнять синхронные вызовы службы и обновляет эти вышеупомянутые свойства путем «обновления» данных.

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

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

Какой лучший способ уведомить пользовательский интерфейс о том, что класс Updater являетсяпокончено с работой?

Ответы [ 2 ]

3 голосов
/ 05 июня 2010

Эти исключения между потоками могут быть решены путем обновления пользовательского интерфейса с помощью функции Dispatcher.Invoke. Dispatcher - это объект, который можно использовать для вызова в потоке пользовательского интерфейса. Прочитайте эту статью , и вы должны быть готовы.

0 голосов
/ 05 июня 2010

Лучший способ сделать это - связать, если вы можете. Реализуйте интерфейс System.ComponentModel.INotifyPropertyChanged с вашими классами данных, а затем привяжите элементы пользовательского интерфейса к свойствам этих классов, которые вы хотите отобразить. Когда свойства обновляются, они запускают событие PropertyChanged, которое обрабатывается внутренне объектами зависимостей WPF и автоматически обновляет ваш пользовательский интерфейс. Это способ избежать большого количества сантехники, которую обычно приходится собирать самостоятельно, чтобы отвечать на обновления.

Эта запись в блоге дает хороший пример того, как ее использовать, но есть еще много доступных в Интернете.

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