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