Почему в .NET есть 5 версий таймерных классов?

Почему в .Net Framework есть пять классов таймеров, а именно:

  1. System.Timers.Timer
  2. System.Threading.Timer
  3. System.Windows.Forms.Timer
  4. System.Web.UI.Timer
  5. System.Windows.Threading.DispatcherTimer

Почему существует несколько версий класса Timer? И чем они отличаются?

Ответ 1

Здесь вы идете:

Сравнение классов таймера в библиотеке классов .NET Framework https://web.archive.org/web/20150329101415/https://msdn.microsoft.com/en-us/magazine/cc164015.aspx

Содержание

  • System.Windows.Forms.Timer
  • System.Timers.Timer
  • System.Threading.Timer
  • Программирование по таймеру с таймерами
  • Работа с реестром событий с таймером
  • Заключение

Ответ 2

Timers.Timer генерирует событие после заданного интервала с возможностью генерировать повторяющиеся события. MSDN

Windows.Forms.Timer - это элемент управления для winforms.

Web.UI.Timer выполняет асинхронную или синхронную обратную передачу веб-страницы через определенный интервал. MSDN

Threading.Timer - таймер для обратных вызовов. Создает новую тему для работы. Подается потоками пула потоков. MSDN

Итак, эти таймеры имеют разные цели, и они обслуживаются разными инструментами.

Ответ 3

Вот описание основных таймеров и пунктов, которые я считаю наиболее примечательными.

Winforms.Timer

  • галочки в потоке пользовательского интерфейса не гарантируют тикет в определенное время
  • тики задерживаются, пока поток пользовательского интерфейса не будет свободен
  • будет пропускать тики, если поток пользовательского интерфейса занят

DispatcherTimer

  • вызывается в потоке пользовательского интерфейса
  • можно установить приоритет для того, какой уровень "холостого хода" требуется для генерации галочки
  • будет пропускать галочки

Threading.Timer

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

Timers.Timer

  • Обертка вокруг потокового таймера
  • отметки на рабочем потоке, взятом из пула потоков CLR
  • может заставить галочку на определенном потоке, предоставив SynchronizationObject
  • клещи всегда стреляют вовремя
  • ни один из них не пропущен
  • молча ест исключения