Frage Wie programmiere ich einen Timer?


Nehmen wir an, ich habe einen Windows Forms-Timer konfiguriert mit einem 10 Sekunden (10k ms) Intervall:

myTimer.Interval = 10000;

Ich möchte es starten und die Tick Veranstaltung sofort:

myTimer.Start();
myTimer_Tick(null, null);

Die letzte Zeile funktioniert, aber gibt es einen besseren oder geeigneteren Weg?


13
2018-01-13 19:47


Ursprung


Antworten:


Das einzige, was ich anders machen würde, ist, die eigentliche Tick-Funktionalität in eine separate Methode zu verschieben, so dass Sie das Ereignis nicht direkt aufrufen müssen.

myTimer.Start();
ProcessTick();

private void MyTimer_Tick(...)
{
    ProcessTick();
}

private void ProcessTick()
{
    ...
}

In erster Linie würde ich das so machen, als ob der direkte Aufruf von Ereignissen mir einfällt Code-Geruch - oft zeigt es spagetti struktur code.


31
2018-01-13 19:52



Es gibt mindestens 4 verschiedene "Timer" in .NET. Mit System.Threading können Sie eine Methode erhalten, mit der Sie die Anfangsverzögerung festlegen können.

var Timer = new Timer(Timer_Elapsed, null, 0, 10000);

Es gibt Vorteile bei der Verwendung der verschiedenen Timer und Hier ist ein guter Artikel, der sie alle diskutiert.


9
2018-01-13 20:04



Sie könnten das Intervall auf 1 setzen (0 bedeutet wahrscheinlich unendliches Timeout) und es auf 10k setzen, wenn es das erste Mal tickt.

Der Timer tickt "sehr bald" (abhängig davon, welche Art von Timer Sie verwenden, siehe Dies) aber die Ausführung wird nicht mit dem Click-Handler wie in Ihrer Lösung fortgesetzt.

(Ich nehme an, Sie wussten von der Lösung von Bevan).


2
2018-01-13 19:50