Threading.Timer vs. Forms.Timer
Краткая форма этого вопроса: когда, если когда-либо, целесообразно использовать Forms.Timer в многопоточном приложении WinForms?
В частности, я архивирую приложение, которое использует несколько System.Threading.Timers для запуска процессов асинхронно, проверяет очереди, содержащие результаты этих асинхронных процессов, и обновляет статистику, которая будет показана основной формой приложения.
В подобном приложении целесообразно использовать Forms.Timer для фактической проверки статистики приложения и приведения их в основную форму, или это просто запустит ключ в приложение плавно?
Ответы
Ответ 1
Forms.Timer
регистрирует таймер для отправки сообщения при выключении таймера. Событие, поднятое, рассматривается как событие GUI. System.Threading.Timer
использует подход блокировки потоков. В принципе, вы должны использовать Forms.Timer
для ваших ориентированных на GUI таймеров (чтобы добавить некоторые эффекты к пользовательскому интерфейсу) и Threading.Timer
для планирования задач и других вещей.
Ответ 2
В MSDN была сравнительная статья, которая делает предмет правосудия.
Ответ 3
С .NET Framework 3.0 у нас также есть System.Windows.Threading.DispatcherTimer в нашем распоряжении. Вот как я его использовал:
timer.Interval = New TimeSpan(0, 0, 1)
timer.IsEnabled = True
AddHandler timer.Tick, AddressOf UpdateUI
timer.Start()
Я знаю, что исходный вопрос не включал этот класс и был ориентирован на формы выигрыша. Тем не менее, для приложения WPF, над которым я работаю, у меня была та же самая dillema, и я обнаружил, что этот DispatcherTimer работает хорошо.
Ответ 4
Я согласен с тем, что сказал Мехрдад и Дэвид, но вы должны знать, что таймеры не гарантируют своевременность, порядок или исполнение. Слишком много таймеров и приложение просто зависают; -)