2009-04-24 20 views

risposta

3

Timer.Stop() dopo 120 zecche.

+0

amore negativo per la risposta più semplice? :) –

2

Annotare l'ora di inizio. In ogni chiamata, verifica se currentTime + 5 secondi> startTime + 10 minuti. Se è così, disabilita il timer.

Preferisco questo approccio alla semplice esecuzione di N tick, in quanto i timer non sono garantiti per sparare quando ti piacerebbe. È possibile che 120 tick possano durare più di 10 minuti nel mondo reale.

3

basta usare una variabile DateTime per tracciare quando dovrebbe terminare e impostarla prima di iniziare. Sul gestore eventi Elapsed, controlla se il tempo del segnale è inferiore all'ora di fine. Se non lo è, ferma il timer.

3

È possibile calcolare il tempo in cui la funzione verrà chiamata e creare il contatore di decremento, trascorso il quale si annulla l'iscrizione al timer. Oppure puoi eseguire un altro timer che ha un periodo di tick - 10 minuti e in tick cancellarti dal tick tick che chiama la tua funzione.

6

Dividere i minuti Y per l'intervallo X per ottenere quante volte deve essere eseguito. Dopodiché devi solo contare quante volte è stata chiamata la funzione.

Nel tuo caso, 10 min = 600 secondi/5 secondi = 120 chiamate necessarie. Basta avere un contatore per tenere traccia di quante volte è stata chiamata la funzione.

9

avere il vostro ciclo timer qualcosa di simile:

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

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

Preferirei memorizzare * l'ora di fine * e confrontarla con il valore del tempo presente prima di ogni iterazione. Tuttavia, +1. – Cerebrus

+1

Hai ragione, memorizzare l'ora di fine sarebbe meglio. –

2

È possibile impostare due timer uno che corrono per 5 secondi e l'altra che corrono per 10 minuti e disattivare il primo

12

Basta catturare il tempo che si desidera interrompere e terminare il timer dall'interno del gestore. Ecco un esempio (nota: ho usato un timer System.Threading.Timer. Seleziona il timer appropriato per quello che stai facendo. Ad esempio, potresti essere dopo un System.Windows.Forms.Timer se stai scrivendo in Winforms)

 

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

È possibile utilizzare un secondo timer:

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; 
}