вопрос про System.Windows.Forms.Timer - PullRequest
0 голосов
/ 25 февраля 2010

Я строю приложение WinForms, считывающее данные из сокета и линии графиков. Я использую System.Windows.Forms.Timer, чтобы вызвать каждую секунду событие,

  • получает данные из очереди, заполненной сокетом
  • перерисовывает линии на графике

Мой вопрос об объекте Timer: у меня есть один объект Timer для каждой WinForm, у которого есть график для перерисовки; Итак, предположим, у меня есть 20 диаграмм, у меня будет 20 форм с общим количеством 20 таймеров.

Это хороший подход? Я решил это исходя из следующего (пожалуйста, поправьте меня, если я ошибаюсь)

  • Forms.Timer Экземпляр не создает поток в моем приложении, а просто вызывает событие при получении события WM_TIMER от помпы сообщений формы.
  • он находится в том же потоке графического интерфейса, поэтому я могу напрямую обращаться к каждому элементу моих форм, не беспокоясь слишком сильно.

Слишком много таймеров - это хороший подход или у меня может быть недостаток? Спасибо AFG

Ответы [ 3 ]

2 голосов
/ 25 февраля 2010

Это хороший подход, хотя вам может потребоваться повторно использовать таймеры вместо создания отдельного таймера для каждой формы.
Например, вы можете создать объект static Timer и добавить обработчик Tick в конструкторе формы. Не забудьте отписаться от события, когда форма закрывается (в Dispose или OnClose), или ваши формы никогда не умрут.

1 голос
/ 25 февраля 2010

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

0 голосов
/ 25 февраля 2010

Почему бы не перерисовать линию сразу, когда данные получены сокетом?

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