myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Mehrere Countdowns hintereinander starten
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Mehrere Countdowns hintereinander starten

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 13


PierreDole ist offline

Mehrere Countdowns hintereinander starten

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin,

ich komme bei meinem kleinen Vorhaben nicht weiter und bräuchte etwas Hilfestellung. Ich möchte mehrere Countdowns hintereinander ausführen. Momentan rast das Programm durch alle Zeitsetzungen durch. Wie halte ich es an, ohne es in einer While-Schleife gefangen zu halten? Ich habe es mit einer While-Schleife versucht, anstatt des Timers, aber dann wurde die GUI nicht aktualisiert.

Momentan sieht das alles wie folgt aus:

C#-Code:
using System;

namespace Training_Timer
{
    class Training
    {
        // class vars
        private System.Windows.Forms.Timer aTimer;
        private System.Media.SoundPlayer timeOutSignal;
        private int timerCounter;

        private TrainingPlan plan;
        private System.Windows.Forms.Label uiLabel;


        public Training()
        {
            _init();

            InitCountdown();
        }

        // init
        private void _init()
        {
            aTimer = new System.Windows.Forms.Timer();
            timeOutSignal = new System.Media.SoundPlayer(@"F:\workspace\Visual Studio 2017\Projects\Training Timer\signal01.wav");

            timerCounter = 0;

            // avoid crash
            plan = new TrainingPlan();
            uiLabel = new System.Windows.Forms.Label();
        }

        public void Start()
        {
            foreach (TrainingExercise exercise in plan)
            {
                for (int i = 0; i < exercise.Sets; i++)
                {
                    Countdown(exercise.Duration);

                    if (exercise.Pause != 0)
                        Countdown(exercise.Pause);
                }
            }
        }


        // timer
        private void InitCountdown(int interval)
        {
            aTimer.Tick += new EventHandler(OnTimedEvent);
            aTimer.Interval = interval;
        }

        private void InitCountdown()
        {
            InitCountdown(1000);
        }

        private void Countdown(int duration)
        {
            //UpdateUITimer(duration);
            timerCounter = duration;
            aTimer.Enabled = true;
        }





        private void UpdateUITimer(int counter)
        {
            uiLabel.Text = TimeSpan.FromSeconds(counter).ToString("mm':'ss");
        }



        // events
        private void OnTimedEvent(object source, EventArgs e)
        {
            if(timerCounter == 0)
            {
                timeOutSignal.Play();
                aTimer.Enabled = false;
            }
            UpdateUITimer(timerCounter);
            timerCounter--;
        }



        // getter & setter
        public void SetPlan(TrainingPlan trainingPlan)
        {
            plan = trainingPlan;
        }

        public void SetUILabel(System.Windows.Forms.Label label)
        {
            uiLabel = label;
        }
    }
}
06.06.2019 16:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.170
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Besser und einfacher: Reactive Extensions.

 Reactive Extensions (Rx) – Part 4 – Replacing Timers
Spart Dir hier 90% Quellcode.
06.06.2019 16:31 Beiträge des Benutzers | zu Buddylist hinzufügen
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 13

Themenstarter Thema begonnen von PierreDole

PierreDole ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank! Damit geht funktioniert es sehr gut. :)
07.06.2019 12:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 14.11.2019 07:32