Entwickler-Ecke

Basistechnologien - Timer bei 0,10,20,... Sekunden


BlackMatrix - Fr 10.12.10 17:22
Titel: Timer bei 0,10,20,... Sekunden
Hallo.

Ein Timer, der sich bei 0,10,20,... melden soll, kann der sinnvoll auch anders geschrieben werden als:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
      Methode(null,null);//für 0 Sekunden
      
      Timer timer = new Timer(10000);
      timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
      timer.Start();//für alle 10 Sekunden
      
      Console.ReadKey();


MfG


huuuuuh - Fr 10.12.10 19:05

jep. Du könntest mit Thread.Sleep() arbeiten (was das programm dann anhalten würd) oder du könntest die zeit messen (mit DateTime). Wüsste aber nich was das bringen soll... Timer sind doch dazu da, sich nach bestimmten zeiten zu melden


BlackMatrix - Fr 10.12.10 20:36

Ich meinte eher, ob ein Timer so eingestellt werden kann, dass er nicht erst nach 10 Sekunden aktiv wird, sondern schon bei 0 und dann erst bei 10 Sekunden,...


huuuuuh - Fr 10.12.10 20:47

ach so meintest du das... nein, solch eine möglichkeit wäre mir nicht bekannt.


Yogu - Fr 10.12.10 21:38

Was spricht denn dagegen, die Funktion einfach einmal manuell auszuführen?


BlackMatrix - Fr 10.12.10 21:43

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Was spricht denn dagegen, die Funktion einfach einmal manuell auszuführen?


Joa das funzt schon, hatte nur gedacht, dass man den Timer irgendwie auf 0 stellen kann und dann gleich wieder auf 10 Sekunden, aber der Aufruf mit 2x null ist auch okay.

Danke euch beiden.


Kha - Fr 10.12.10 23:26

Die sauberere Version:


C#-Quelltext
1:
2:
3:
timer.Elapsed += delegate { DeineEigentlicheMethode(); };
timer.Start();
DeineEigentlicheMethode();


PS: Ein Timer in einer Konsolenanwendung? Warum keine Endlosschleife?


BlackMatrix - Sa 11.12.10 01:57

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Die sauberere Version:


C#-Quelltext
1:
2:
3:
timer.Elapsed += delegate { DeineEigentlicheMethode(); };
timer.Start();
DeineEigentlicheMethode();


PS: Ein Timer in einer Konsolenanwendung? Warum keine Endlosschleife?


Sehr elegant, vielen Dank dafür.

Ein Timer in einer GUI-Anwendung


Yogu - Sa 11.12.10 10:35

user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Ein Timer in einer GUI-Anwendung

user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
 
7:
/* ... */
      Console.ReadKey();

:gruebel:


BlackMatrix - Sa 11.12.10 10:45

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Ein Timer in einer GUI-Anwendung

user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
 
7:
/* ... */
      Console.ReadKey();

:gruebel:


Ja, ich hatte den Code aus meiner Gui in ein anderes Projekt geschrieben um zu testen und da habe ich schnell eine Readkey Befehl gesetzt.


ujr - Fr 17.12.10 00:51

user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
hatte nur gedacht, dass man den Timer irgendwie auf 0 stellen kann und dann gleich wieder auf 10 Sekunden, aber der Aufruf mit 2x null ist auch okay.


Das geht in der Tat mit dem System.Threading.Timer. Dem kann man mit .Change die Verzögerung für den ersten Aufruf und für die Periode mitgeben. Zu beachten ist natürlich, dass der Timer in einem Thread des Threadpools läuft und man deshalb für den Zugriff auf die GUI Invoke/BeginInvoke verwenden muss.