Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[Gelöst] Stunde dauerhaft überprüfen bis 04:00 Uhr
GreeenPeppper
myCSharp.de - Member



Dabei seit:
Beiträge: 2
Herkunft: Deutschland

Themenstarter:

[Gelöst] Stunde dauerhaft überprüfen bis 04:00 Uhr

beantworten | zitieren | melden

Bonjour,

ich versuche aktuell in einem Forms-Programm die Stunden per DateTime permanent zu vergleichen, bis um 04:00 Uhr und das um 04:00 Uhr dann eine Aktion ausgeführt wird.
Das Problem:
Es scheint so oft und so schnell zu überprüfen, dass es das Programm auf Inaktiv setzt und nichts mehr funktioniert =\
Wie kann ich jetzt verhindern, dass es nicht in den Inaktiv Status geht aber trotz dessen noch überprüft und um Punkt 04:00 Uhr meine Aktion ausführt?
Die Aktion funktioniert, hab ich schon ausprobiert.


        DateTime now = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
        DateTime then = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 4, 00, DateTime.Now.Second);

        public Form1()
        {
            InitializeComponent();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {

                int compareValue = now.CompareTo(then);

                while(compareValue != 0)
                {
                    timer1.Start();
                    timer1.Tick += new EventHandler(timer_Tick);
                }
                if (compareValue == 0)
                {
                      //AKTION
                }

            }
        }


        void timer_Tick(object sender, EventArgs e)
        {
            int compareValue = now.CompareTo(then);
        }

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von GreeenPeppper am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15526
Herkunft: BW

beantworten | zitieren | melden

Im Endeffekt baust Du da eine Endlosschleife. Dürfte Deine CPU ziemlich belasten, da auch ein völlig falscher Ansatz.
[FAQ] Warum blockiert mein GUI?

Besser: berechne die Zeit bis 0400 und erstelle einen Timer.


TimeStamp duration = <kalkuliere hier die Zeit bis 0400>
Timer t = new System.Threading.Timer(o =>
            {
                // Mache hier etwas, wenn 0400 erreicht ist.
            },
            null,
            duration,
            TimeSpan.FromMilliseconds(-1));


Alternativ mit Reactive Extensions


TimeStamp duration = <kalkuliere hier die Zeit bis 0400>
Observable
        .Timer(duration) // bzw. mit DispatcherScheduler.Current als Parameter, wenn Du in der UI bist
        .Subscribe(
            x =>
            {
               // Mache hier etwas, wenn 0400 erreicht ist.
            });


Wozu soll das denn dienen? Hört sich nach Logik an; würde damit nicht in die Verantwortung der UI kommen.
Wenn Du erklärst, was Du vor hast, könnte man Dir bessere Lösungsmöglichkeiten erklären.
private Nachricht | Beiträge des Benutzers
GreeenPeppper
myCSharp.de - Member



Dabei seit:
Beiträge: 2
Herkunft: Deutschland

Themenstarter:

beantworten | zitieren | melden

Danke, funktioniert perfekt!
private Nachricht | Beiträge des Benutzers