Entwickler-Ecke

WinForms - Timer reset


IbisGER - So 24.12.17 09:05
Titel: Timer reset
Hallo zusammen,

ich arbeite aktuell an einem Programm das durch einen Timer getriggert wird, sprich es wird eine Minutenanzahl angezeigt in der dieser Timer eine Aktion ausführen, leider startet der Timer hier immer wieder bei dem ersten Startwert statt abzulaufen und diesen bei 0 neu anzustoßen.

Habe ich hier in dieser Prozedur einen Logikfehler?



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
            {
                int iTime = Convert.ToInt32(numMinuten.Value);
                int iTimeLeft = (iTime * 60000);

                if (iTimeLeft <= 0)
                {
                    iTimeLeft = iTimeLeft - 1;
                }
                    Event();
                    timer1.Start();
                }
            }


Danke für alle Hinweise.

IbisGER


Delete - So 24.12.17 10:32

- Nachträglich durch die Entwickler-Ecke gelöscht -


Blawen - So 24.12.17 12:52

Ich nehme mal an, dass der Wert der Variablen im Normalfall POSITIV ist.
Insofern wird deren Wert nicht verringert

 if (iTimeLeft <= 0)

Wann setzt Du die Variable wieder auf ihren Ausgangswert zurück?


TmpDir - So 24.12.17 15:32

Warum nicht System.Timers.Timer [https://msdn.microsoft.com/de-de/library/system.timers.timer(v=vs.110).aspx] benutzen?

Editiert:

Habe überlesen, das diese Routine von einem Timer bereits getriggert wird.

Sofern du nur einmal den Event() triggern willst, dann beim erstellen des Timers die Laufzeit angeben.

C#-Quelltext
1:
2:
3:
System.Timers.Timer t = new System.Timers.Timer(numValue.Value * 60000);
t.Elapsed += Event();
t.Start();

Mehr nicht.

Willst du auch noch die verbleibende Zeit anzeigen sollte man das etwas anders machen.

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.


IbisGER - So 31.12.17 08:38

Hallo zusammen,

sorry das ich jetzt erst Antworte war leider komplett flach gelegen.

Das Programm soll in bestimmten Taktungen die Outlook Emails prüfen und bei einem bestimmten Absender eine Message Box anzeigen damit diese Mail gesehen wird.

Den Timer habe ich via numericupdown erstellt die Minuten mal 60000 rechnen um die gewünschte Taktung zu erhalten.
leider startet er in meiner bereits gepostetn Quelle den Timer immer wieder neu.

Gruß IbisGER


Th69 - So 31.12.17 10:47

Hast du den Code von TmpDir benutzt?
Ansonsten, in welcher Methode befindet sich dein im Eingangsbeitrag geposteter Code? Wenn dies in der Tick (bzw. Elapsed) Ereignismethode stattfindet, dann ist der nochmalige Aufruf von timer1.Start() natürlich falsch.