Threading.Timer против Forms.Timer - PullRequest
19 голосов
/ 07 января 2009

Краткая форма вопроса: когда, если вообще, уместно ли использовать Forms.Timer в многопоточном приложении WinForms?

Точнее говоря, я создаю приложение, которое использует несколько System.Threading.Timers для асинхронного запуска процессов, проверки очередей, содержащих результаты этих асинхронных процессов, и обновления статистики для отображения в главной форме приложения.

В таком приложении уместно ли использовать Forms.Timer, чтобы фактически проверять статистику приложения и выводить ее в основную форму, или это просто добавит ключ в бесперебойную работу приложения?

Ответы [ 3 ]

24 голосов
/ 07 января 2009

Forms.Timer регистрирует таймер для отправки сообщения, когда таймер отключается. Возникшее событие обрабатывается как событие GUI. System.Threading.Timer использует подход блокировки потоков. По сути, вы должны использовать Forms.Timer для таймеров, ориентированных на GUI (чтобы добавить некоторые эффекты в пользовательский интерфейс) и Threading.Timer для планирования задач и других вещей.

14 голосов
/ 07 января 2009

В MSDN была статья для сравнения , в которой все правильно.

2 голосов
/ 07 января 2009

Я согласен с тем, что сказали Мердад и Дэвид, но вы должны знать, что таймеры не дают никаких гарантий своевременности, порядка или исполнения. Слишком много таймеров и приложение просто зависнет; -)

...