Чому існує 5 версій класів таймерів у .NET?


81

Чому у фреймворку .Net існує п’ять класів таймерів, а саме такі:

  1. System.Timers.Timer
  2. System.Threading.Timer
  3. System.Windows.Forms.Timer
  4. System.Web.UI.Timer
  5. System.Windows.Threading.DispatcherTimer

Чому існує кілька версій класу Timer? І в чому різниця між ними?


4
Насправді є 4 класи таймера, про які ти забуваєш System.Windows.Forms.Timerі System.Web.UI.Timer(а також System.Windows.Threading.DispatcherTimer, але він має іншу назву ...)
Томас Левеск,

1
@ThomasLevesque, дякую, вказуючи на це, я оновив запитання.
Мохаммед А. Фаділ,

2
Всі вони поводяться по-різному, наприклад System.Threading.Timer створює новий потік кожного разу, коли він ставить галочку.
Тенерецца,

1
Ось: Порівняння класів таймерів у бібліотеці класів .NET Framework web.archive.org/web/20150329101415/https://msdn.microsoft.com/… Зміст - System.Windows.Forms.Timer - System.Timers. Таймер - System.Threading.Timer - Безпечне для потоків програмування з таймерами - Робота з повторним входом події таймера - Висновок
Carlos Quintanilla

5
@MitchWheat, я подивився на ваше запитання, воно обговорює лише 2 із 5, отже, це не дублікат.
Мохаммед А. Фаділ,

Відповіді:


20

Ось опис основних таймерів та пунктів, які я вважаю найбільш вартими уваги.

Winforms.Timer

  • галочки на потоці інтерфейсу користувача не гарантовано надходять у певний час
  • галочки затримуються, поки потік інтерфейсу користувача не буде простоювати
  • буде пропускати галочки, якщо потік інтерфейсу зайнятий

DispatcherTimer

  • викликається в потоці інтерфейсу користувача
  • може встановити пріоритет для того, який рівень "простою" необхідний для генерації галочки
  • буде пропускати кліщі

Threading.Timer

  • галочки на робочому потоці з пулу потоків - немає можливості вказати потік
  • кліщі завжди відстрілюються вчасно
  • жоден не пропускається - ви повинні захищатись від нових кліщів, поки ви все ще обробляєте колишнього кліща
  • необроблені винятки призведуть до збою програми

Timers.Timer

  • обгортка навколо різьбового таймера
  • галочки на робочому потоці, взятому з потокової нитки CLR
  • може змусити галочку на конкретному потоці, надавши SynchronizationObject
  • кліщі завжди відстрілюються вчасно
  • жоден не пропускається
  • мовчки їсть винятки

1
кліщі завжди відстрілюються вчасно . Завжди - це сильне слово. AFAIK необхідний доступний потік пулу потоків потрібен для того, щоб галочка з’явилася вчасно.
Теодор Зуліас,

11

Timers.Timerгенерує подію через заданий інтервал, з можливістю генерувати повторювані події. MSDN

Windows.Forms.Timer є контролем для винних форм.

Web.UI.Timerвиконує асинхронні або синхронні зворотні передачі веб-сторінок через певний інтервал. MSDN

Threading.Timer- таймер зворотних дзвінків. Створює нову нитку для роботи. Обслуговується потоками пулу потоків.MSDN

Отже, ці таймери мають різне призначення, також вони обслуговуються різними інструментами.


1

Зараз на це питання відповідає Microsoft у статті MSDN для system.timers.timer

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

Порада

Майте на увазі, що .NET включає чотири класи з ім'ям Таймер, кожен з яких пропонує різні функції:

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, який регулярно виконує асинхронні або синхронні зворотні веб-сторінки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.