2009-04-24 6 views

Antwort

3

Timer.Stop() nach 120 Ticks.

+0

Negative Liebe für die einfache Antwort? :) –

2

Beachten Sie die Startzeit. Prüfen Sie bei jedem Anruf, ob currentTime + 5 Sekunden> startTime + 10 Minuten. Ist dies der Fall, deaktivieren Sie den Timer.

Ich bevorzuge diesen Ansatz, um nur für N Ticks zu laufen, da Timer nicht garantiert werden, wenn Sie sie möchten. Es ist möglich, dass 120 Ticks über 10 Minuten der realen Zeit laufen.

3

Verwenden Sie einfach eine DateTime-Variable, um zu verfolgen, wann sie beendet werden soll, und setzen Sie diese direkt vor dem Start. Überprüfen Sie in Ihrem Elapsed-Ereignishandler, ob die Signalzeit kürzer als die Endzeit ist. Ist dies nicht der Fall, stoppen Sie den Timer.

3

Sie können berechnen, wie mal Ihre Funktion aufgerufen werden soll, und einen Dekrement-Zähler erstellen, nachdem Sie den Timer-Tick abbestellt haben. Oder Sie können einen anderen Timer starten, der eine Tick-Periode hat - 10 Minuten und ankreuzen Sie die Tick-Taste ab, wenn Sie Ihre Funktion aufrufen.

6

Teilen Sie die Y-Minuten durch das X-Intervall, um zu ermitteln, wie oft es ausgeführt werden muss. Danach müssen Sie nur zählen, wie oft die Funktion aufgerufen wurde.

In Ihrem Fall, 10 min = 600 Sekunden/5 Sekunden = 120 Anrufe benötigt. Überzeugen Sie sich einfach, wie oft Ihre Funktion aufgerufen wurde.

9

Haben Sie Ihre Timer-Schleife etwas wie folgt aus:

DateTime endTime = DateTime.Now.AddMinutes(10); 

while(endTime < DateTime.Now) 
{ 
    // Process loop 
} 
+2

Ich würde lieber die * Endzeit * speichern und diese mit dem aktuellen Zeitwert vor jeder Iteration vergleichen. Trotzdem +1. – Cerebrus

+1

Sie haben Recht, Speichern der Endzeit wäre besser. –

2

Sie können zwei Timer eins gesetzt, der für 5 Sekunden und die andere ausführen, die für 10 Minuten laufen, und deaktivieren Sie erfassen die erste

12

Nur die Zeit, die Sie anhalten möchten, und beenden Sie Ihren Timer aus dem verstrichenen Handler. Hier ist ein Beispiel (Hinweis: Ich habe einen System.Threading.Timer-Timer verwendet. Wählen Sie den entsprechenden Timer für das, was Sie tun. Zum Beispiel könnten Sie nach einem System.Windows.Forms.Timer sein, wenn Sie in Winforms schreiben)

 

public class MyClass 
{ 
    System.Threading.Timer Timer; 
    System.DateTime StopTime; 
    public void Run() 
    { 
     StopTime = System.DateTime.Now.AddMinutes(10); 
     Timer = new System.Threading.Timer(TimerCallback, null, 0, 5000); 
    } 

    private void TimerCallback(object state) 
    { 
     if(System.DateTime.Now >= StopTime) 
     { 
      Timer.Dispose(); 
      return; 
     } 
     // do your work..... 
    } 
} 
 
2

Sie könnten einen zweiten Timer verwenden:

class Program 
{ 
    static void Main(string[] args) 
    { 
     int interval = 5 * 1000; //milliseconds 
     int duration = 10 * 60 * 1000; //milliseconds 

     intervalTimer = new System.Timers.Timer(interval); 
     durationTimer = new System.Timers.Timer(duration); 

     intervalTimer.Elapsed += new System.Timers.ElapsedEventHandler(intervalTimer_Elapsed); 
     durationTimer.Elapsed += new System.Timers.ElapsedEventHandler(durationTimer_Elapsed); 

     intervalTimer.Start(); 
     durationTimer.Start(); 
    } 

    static void durationTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     intervalTimer.Stop(); 
     durationTimer.Stop(); 
    } 

    static void intervalTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     //call your method 
    } 

    private static System.Timers.Timer intervalTimer; 
    private static System.Timers.Timer durationTimer; 
} 
Verwandte Themen