Фоновый рабочий и обновление диаграммы - PullRequest
1 голос
/ 27 мая 2011

Я использую фоновый рабочий для чтения значений данных с устройства и отображения на диаграмме. Я использую BeginInvoke и обновляю значения на диаграмме.Проблема в том, что значения обновляются на графике с задержкой не менее 2 - 3 секунд и не в режиме реального времени.Скорость обновления на графике также меняется, в один момент график обновляется со всеми предыдущими значениями.

Как мне сделать это в реальном времени?Любая помощь высоко ценится.

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Я бы предложил один из 2 вариантов.

1) Сделайте саму диаграмму отдельной формой WPF, встроенной с основным пользовательским интерфейсом, и используйте Invoke вместо BeginInvoke для обновления диаграммы (это приведет к зависанию пользовательского интерфейса диаграммы при обновлении, но кого это волнует)

2) Используйте DispatchTimer на стороне пользовательского интерфейса для извлечения данных вместо того, чтобы обработка подталкивала их к пользовательскому интерфейсу ... по моему опыту, BeginInvoke никогда не работает очень хорошо.

0 голосов
/ 27 мая 2011

Это то, что я называю конфликтом пользовательского интерфейса. Сама природа асинхронного программирования BeginInvoke зависит от извлечения из источника и передачи его в пользовательский интерфейс. Я подозреваю, что ваш BeginInvoke требует больше времени здесь. Я попробую «DispatchTimer» или, если вы используете C # 4.0, попробуйте использовать «Задачи».

0 голосов
/ 27 мая 2011

Я подозреваю, что у вас слишком много обновлений, и это перегружает очередь сообщений.Сообщения, скорее всего, будут доставлены не по порядку.Возможно, вы можете объединить несколько обновлений в один BeginInvoke.Кроме того, вы можете прочитать все значения с устройства и передать только последнее значение с Invoke.Invoke обеспечит доставку до вашего следующего Invoke.

...