Why there are 5 Versions of Timer Classes in .NET?

Why are there five timer classes in the .Net framework, namely the following:

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

Why are there several versions of the Timer class? And what are the differences between them?


Solution 1:

Here's a description of the primary timers and the points that i find to be the most noteworthy.

Winforms.Timer

  • ticks on UI thread not guaranteed to ticket at a specific time
  • ticks delayed until UI thread is idle
  • will skip ticks if the UI thread is busy

DispatcherTimer

  • invoked on UI thread
  • can set priority for what level of 'idle' is required to generate a tick
  • will skip ticks

Threading.Timer

  • ticks on a worker thread from threadpool - no option for specifying thread
  • ticks are always fired on time
  • none are skipped - you must guard against new ticks while you're still processing a former tick
  • unhandled exceptions will crash the application

Timers.Timer

  • wrapper around threading timer
  • ticks on a worker thread taken from the CLR threadpool
  • can force to tick on a specific thread by supplying a SynchronizationObject
  • ticks are always fired on time
  • none are skipped
  • silently eats exceptions

Solution 2:

Timers.Timer generates an event after a set interval, with an option to generate recurring events. MSDN

Windows.Forms.Timer is a Control for winforms.

Web.UI.Timer performs asynchronous or synchronous Web page postbacks at a defined interval. MSDN

Threading.Timer is the timer for Callbacks. Creates a new Thread for working. Served by thread pool threads. MSDN

So, these timers have different purposes, also they are served by different tools.