[Timer ]Event bei jeder Sekunde

  • WPF

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von LucaWelker.

    [Timer ]Event bei jeder Sekunde

    Hey liebe Community,

    ich wollte Fragen ob jemand weiß wie ich das am besten umsetze. Da ich kein Fan von Timern bin, bräuchte ich eure hilfe.

    Und zwar, würde ich gerne einen Timer jede Sekunde, 5 Sekunden lang laufen lassen, jede Sekunde wird bei meinem Label (Start.Content = "5";) 5, danach 4, danach 3, danach 2, danach 1 und letzlich Close(); ausgeführt.
    Ich hatte es schon mit If und case versucht, allerdings immer wieder gescheitert.

    Hoffe ihr könnt mir helfen.

    C#-Quellcode

    1. private void Timer()
    2. {
    3. DispatcherTimer timer = new DispatcherTimer();
    4. timer.Interval = TimeSpan.FromSeconds(1d);
    5. timer.Tick += TimerTick;
    6. timer.Start();
    7. }
    8. private void TimerTick(object sender, EventArgs e)
    9. {
    10. DispatcherTimer timer = (DispatcherTimer)sender;
    11. timer.Stop();
    12. timer.Tick -= TimerTick;
    13. //Das hab ich bis jetzt schon irgendiwe versucht, aber ich blick bei Timern sowieso nie durch.
    14. /*
    15. int value = 0;
    16. if (value == 0)
    17. {
    18. value++;
    19. Version.Content = "5";
    20. }
    21. if (value == 1)
    22. {
    23. value++;
    24. Version.Content = "4";
    25. }
    26. if (value == 2)
    27. {
    28. value++;
    29. Version.Content = "3";
    30. }
    31. if (value == 3)
    32. {
    33. value++;
    34. Version.Content = "2";
    35. }
    36. if (value == 4)
    37. {
    38. value++;
    39. Version.Content = "1";
    40. }
    41. string[] states = { "5", "4", "3", "2" };
    42. int cur_state = 0;
    43. while (true)
    44. {
    45. Version.Content = (states[cur_state]);
    46. cur_state++;
    47. if (cur_state == 4)
    48. {
    49. cur_state = 0;
    50. }
    51. }
    52. */
    53. }




    Grüße Sayem
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates
    Versuch es mal so:

    C#-Quellcode

    1. System.Windows.Forms.Timer time = new System.Windows.Forms.Timer();
    2. int i = 5;
    3. private void starttime()
    4. {
    5. time.Interval = 1000;
    6. time.Tick += new EventHandler(this.timetick);
    7. time.start();
    8. }
    9. private void timetick(object sender, EventArgs e)
    10. {
    11. label1.Text = i.ToString();
    12. i--;
    13. if (i == 0)
    14. {
    15. time.stop();
    16. //do something
    17. }
    18. }

    thefiloe schrieb:

    Deine if abfragen bringen grad gar nichts. Die laufen alle durch. Wenn dann brauchst du else ifs.


    Ich hatte anfangs if else abfragen, allerdings hat mir so wie ich es versucht hatte dennoch nichts gebracht (das kommentar war nur ein teil des code)


    n1nja schrieb:

    Versuch es mal so...


    Hat übrigens gut funktioniert, hab es ein wenig abgeändert danke dir :D
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates

    ErfinderDesRades schrieb:

    Und, wie kommst du mit der Beantwortung von post#3 voran?


    Ich hab es mit einem Haltepunkt getestet, und nochmals logisch überdacht und mir sowohl den Code von n1nja angeschaut und dann die lösung gefunden. Danke :D
    „Ich würde immer einen faulen Menschen wählen, um einen schwierigen Job zu erledigen, denn er würde sicherlich einen einfachen Weg finden, dies zu tun.“ - Bill Gates
    @Hobbl : Ein Timer generell tickt eine gewisse Zeit und piept dann. In unserem Fall bedeutet aber Timer nicht nur das ablaufen, sondern das sofortige Neustarten nach Ablauf.
    Der TE möchte einen Timer, der nach 1sek abläuft und sich solange neustartet, bis insg. 5sek verstrichen sind. Ergo 5mal.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Ich denke das Problem im Code des TE liegt darin, dass er "value" als Funktionsvariable von Timer-Tick deklariert. Somit ist diese immer wieder 0 wenn er in die TimerTick-Funktion kommt.
    Dass widerum kann nicht passieren, da er bei jedem Tick (in diesem Fall beim ersten) den Timer direkt wieder anhält und das Event abhängt.
    lg.

    LucaWelker