Подтвердить что ты не робот

Threading.Timer vs. Forms.Timer

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

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

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

4b9b3361

Ответ 1

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

Ответ 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

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