Ho bisogno di eseguire una funzione ogni 5 secondi per 10 minuti.Esegui un'operazione ogni x secondi per y minuti in C#
Io uso un timer per eseguirlo per 5 secondi, ma come faccio a limitare il timer per solo 10 minuti?
La ringrazio molto
Andrea
Ho bisogno di eseguire una funzione ogni 5 secondi per 10 minuti.Esegui un'operazione ogni x secondi per y minuti in C#
Io uso un timer per eseguirlo per 5 secondi, ma come faccio a limitare il timer per solo 10 minuti?
La ringrazio molto
Andrea
Timer.Stop()
dopo 120 zecche.
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.
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.
È 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.
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.
avere il vostro ciclo timer qualcosa di simile:
DateTime endTime = DateTime.Now.AddMinutes(10);
while(endTime < DateTime.Now)
{
// Process loop
}
Preferirei memorizzare * l'ora di fine * e confrontarla con il valore del tempo presente prima di ogni iterazione. Tuttavia, +1. – Cerebrus
Hai ragione, memorizzare l'ora di fine sarebbe meglio. –
È possibile impostare due timer uno che corrono per 5 secondi e l'altra che corrono per 10 minuti e disattivare il primo
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.....
}
}
È 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;
}
amore negativo per la risposta più semplice? :) –