Информация от Microsoft об этом (см. Замечания по MSDN ):
- System.Timers.Timer ,
который запускает событие и выполняет код в одном или нескольких приемниках событий
через равные промежутки времени. Класс предназначен для использования в качестве серверного
или сервисный компонент в многопоточной среде; у него нет пользователя
интерфейс и не виден во время выполнения.
- System.Threading.Timer ,
который выполняет один метод обратного вызова в потоке пула потоков в
регулярные отрезки. Метод обратного вызова определяется, когда таймер
создан и не может быть изменен. Как System.Timers.Timer
класс, этот класс предназначен для использования в качестве сервера или службы
компонент в многопоточной среде; у него нет пользовательского интерфейса и
не виден во время выполнения.
- System.Windows.Forms.Timer
(Только .NET Framework), компонент Windows Forms, который запускает событие
и выполняет код в одном или нескольких приемниках событий через равные промежутки времени.
Компонент не имеет пользовательского интерфейса и предназначен для использования в
однопоточная среда; он выполняется в потоке пользовательского интерфейса.
- System.Web.UI.Timer
(Только .NET Framework), компонент ASP.NET, который выполняет асинхронный
или синхронные постбэки веб-страниц с регулярным интервалом.
Интересно отметить, что System.Timers.Timer
устарела в .NET Core 1.0, но была снова реализована в .NET Core 2.0 (/ .NET Standard 2.0).
Цель .NET Standard 2.0 заключалась в том, чтобы было как можно проще переключиться с .NET Framework, что, вероятно, стало причиной его возвращения.
Когда это устарело, надстройка .NET Анализатор переносимости для .NET рекомендовала использовать System.Threading.Timer
вместо.
Похоже, что Microsoft предпочитает System.Threading.Timer
до System.Timers.Timer
.
РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ 2018-11-15:
Я передаю свой ответ, поскольку старая информация о .NET Core 1.0 больше не действительна.