Warum gibt es in .NET 5 Versionen von Timer-Klassen?

77

Warum gibt es im .Net-Framework fünf Timer-Klassen, nämlich die folgenden:

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

Warum gibt es mehrere Versionen der Timer-Klasse? Und was sind die Unterschiede zwischen ihnen?

Mohammed A. Fadil
quelle
4
Es gibt tatsächlich 4 Timer-Klassen, die Sie vergessen System.Windows.Forms.Timerund System.Web.UI.Timer(und auch System.Windows.Threading.DispatcherTimer, aber es hat einen anderen Namen ...)
Thomas Levesque
1
@ThomasLevesque, danke, dass Sie darauf hingewiesen haben, ich habe die Frage aktualisiert.
Mohammed A. Fadil
2
Sie verhalten sich alle unterschiedlich, z. B. System.Threading.Timer erzeugt bei jedem Tick einen neuen Thread.
Tenerezza
1
Los geht's: Vergleichen der Timer-Klassen in der .NET Framework-Klassenbibliothek web.archive.org/web/20150329101415/https://msdn.microsoft.com/… Inhalt - System.Windows.Forms.Timer - System.Timers. Timer - System.Threading.Timer - Thread-sichere Programmierung mit Timern - Umgang mit Timer Event Reentrance - Fazit
Carlos Quintanilla
5
@MitchWheat, ich habe mir die von Ihnen gestellte Frage angesehen. Sie behandelt nur 2 von 5, daher handelt es sich nicht um ein Duplikat.
Mohammed A. Fadil

Antworten:

17

Hier ist eine Beschreibung der primären Timer und der Punkte, die ich am bemerkenswertesten finde.

Winforms.Timer

  • Ticks auf dem UI-Thread, für die nicht garantiert wird, dass sie zu einem bestimmten Zeitpunkt ein Ticket abgeben
  • Ticks verzögert, bis der UI-Thread inaktiv ist
  • Überspringt Ticks, wenn der UI-Thread beschäftigt ist

DispatcherTimer

  • wird im UI-Thread aufgerufen
  • kann die Priorität für die Stufe "Leerlauf" festlegen, die zum Erzeugen eines Ticks erforderlich ist
  • überspringt Zecken

Threading.Timer

  • Häkchen in einem Worker-Thread aus dem Threadpool - keine Option zum Angeben eines Threads
  • Zecken werden immer pünktlich abgefeuert
  • Keine wird übersprungen - Sie müssen sich vor neuen Zecken schützen, während Sie noch eine frühere Zecke verarbeiten
  • Nicht behandelte Ausnahmen führen zum Absturz der Anwendung

Timers.Timer

  • Wrapper um Threading-Timer
  • kreuzt einen Worker-Thread an, der aus dem CLR-Threadpool entnommen wurde
  • kann das Ankreuzen eines bestimmten Threads erzwingen, indem ein SynchronizationObject angegeben wird
  • Zecken werden immer pünktlich abgefeuert
  • keine werden übersprungen
  • isst still Ausnahmen
Bill Tarbell
quelle
1
Zecken werden immer pünktlich abgefeuert . Immer ist ein starkes Wort. AFAIK Ein verfügbarer Thread-Pool-Thread ist erforderlich, damit ein Tick rechtzeitig auftritt.
Theodor Zoulias
11

Timers.Timergeneriert ein Ereignis nach einem festgelegten Intervall mit der Option, wiederkehrende Ereignisse zu generieren. MSDN

Windows.Forms.Timer ist ein Steuerelement für Winforms.

Web.UI.Timerführt in einem definierten Intervall asynchrone oder synchrone Webseiten-Postbacks durch. MSDN

Threading.Timerist der Timer für Rückrufe. Erstellt einen neuen Thread zum Arbeiten. Wird von Thread-Pool-Threads bereitgestellt. MSDN

Diese Timer haben also unterschiedliche Zwecke, und sie werden von verschiedenen Tools bedient.

Victor Gorban
quelle