System.Timers.Timer is a terrible class. There is no good way to stop it reliably, there is always a race, and you cannot avoid it. The problem is that its Elapsed event gets from threadpool thread. You cannot predict when this thread will really start working. When you call the Stop () method, this thread may already be added to the thread pool, but it still does not work. It depends on both the Windows thread scheduler and the thread scheduler.
, . threadpool 125 . , , . 2 .
. System.Threading.Timer , . System.Windows.Forms.Timer, .
WF , Control.Invoke(). , . WF. โโ