2009-01-06 5 views
19

Die kurze Form dieser Frage: Wann ist es sinnvoll, den Forms.Timer in einer Multithread-WinForms-Anwendung zu verwenden?Threading.Timer vs. Forms.Timer

Genauer gesagt, ich bin Architecting eine Anwendung, die mehrere System.Threading.Timers verwendet Prozesse asynchron zu starten, überprüfen Warteschlangen die Ergebnisse dieser asynchronen Prozesse enthält, und aktualisieren die Statistiken durch die Hauptform der Anwendung angezeigt werden.

In einer solchen Anwendung ist es angemessen, einen Forms.Timer zu verwenden, um die Anwendungsstatistik tatsächlich zu überprüfen und sie in das Hauptformular zu zeichnen, oder würde dies nur einen Haken in den reibungslosen Ablauf der Anwendung bringen?

Antwort

23

Forms.Timer registriert den Timer, um eine Nachricht zu senden, wenn der Timer ausgeht. Das Ereignis wird wie ein GUI-Ereignis behandelt. System.Threading.Timer verwendet einen Thread-Blocking-Ansatz. Grundsätzlich sollten Sie Forms.Timer für Ihre GUI orientierte Timer verwenden (einige Effekte auf die Benutzeroberfläche hinzufügen) und Threading.Timer für die Planung von Aufgaben und andere Dinge.

+0

Laut dem Artikel, den David in Dakota unten erwähnt, sendet der Forms.Timer ein Ereignis, wenn der Timer abläuft ** und ** wenn die Benutzeroberfläche noch nicht besetzt ist ** und * * führt auf dem Formular-Thread. Es einige der Synchronisation funktioniert und Cross-Thread-Aufruf für Sie. – Suncat2000

13

MSDN hatte eine comparison article, die das Thema gerecht wird.

+2

Decent Artikel. Für die Zwecke dieser Diskussion, wäre es schön, wenn man die Unterschiede zwischen den gegebenen zusammenfassen würde die zwei (Threading.Timer Synchronisation erfordert aber mehr Kontrolle bietet, wird Forms.Timer nicht unbedingt ein Ereignis für jede Zecke erzeugen, usw.) – Shog9

+1

Ausgezeichnet. Auf meinen "zu lesen" Stapel, der geht. –

+0

@ t3rse: Der Link ist tot :( –

2

Ich stimme dem zu, was Mehrdad und David sagten, aber Sie sollten wissen, dass Timer keine Garantie für die Aktualität, die Reihenfolge oder die Ausführung bieten. Zu viele Timer und die Anwendung wird nur hängen ;-)

+0

So viel wusste ich. In dieser besonderen Architektur, weder eine deterministische Reihenfolge der Ausführung noch eine besonderer Aktualität erforderlich. –

Verwandte Themen