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

C#.NetTimer

C# Problem Overview


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?

C# Solutions


Solution 1 - C#

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 - C#

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.

Solution 3 - C#

This question is now answered by Microsoft in the MSDN article for system.timers.timer

https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=net-5.0

> Tip > > Be aware that .NET includes four classes named Timer, each of which > offers different functionality:

> System.Timers.Timer (this topic): fires an event at regular intervals. The class is intended for use as a server-based or service > component in a multithreaded environment; it has no user interface and > is not visible at runtime.

> System.Threading.Timer: executes a single callback method on a thread pool thread at regular intervals. The callback method is > defined when the timer is instantiated and cannot be changed. Like the > System.Timers.Timer class, this class is intended for use as a > server-based or service component in a multithreaded environment; it > has no user interface and is not visible at runtime.

> System.Windows.Forms.Timer (.NET Framework only): a Windows Forms component that fires an event at regular intervals. The component has > no user interface and is designed for use in a single-threaded > environment.

> System.Web.UI.Timer (.NET Framework only): an ASP.NET component that performs asynchronous or synchronous web page postbacks at a > regular interval.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMohammed A. FadilView Question on Stackoverflow
Solution 1 - C#Bill TarbellView Answer on Stackoverflow
Solution 2 - C#Victor GorbanView Answer on Stackoverflow
Solution 3 - C#HackSlashView Answer on Stackoverflow