Я не уверен, как реализованы таймеры в .NET, но если они используют Windows API для создания таймера, цикл сообщений формы получает сообщение WM_TIMER
и только при потоке формы не занят, может ли он обработать этот запрос, поэтому таймер сработает в нужное время, но вы можете остановить поток пользовательского интерфейса. Таймер запускается с помощью API SetTimer
, и ОС обязательно отправит сообщение WM_TIMER
.
Я проверял, только System.Windows.Forms.Timer+TimerNativeWindow.StartTimer(Int32)
зависит от:
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr SetTimer(HandleRef hWnd, int nIDEvent, int uElapse, IntPtr lpTimerFunc);
Так что только этот таймер имеет описанную «проблему».