Potrzebuję uruchomić funkcję co 5 sekund przez 10 minut.Wykonaj operację co x sekund przez y minut w C#
Używam timera, aby uruchomić go na 5 sekund, ale jak mogę ograniczyć timer tylko 10 minut?
Dziękuję bardzo
Andrea
Potrzebuję uruchomić funkcję co 5 sekund przez 10 minut.Wykonaj operację co x sekund przez y minut w C#
Używam timera, aby uruchomić go na 5 sekund, ale jak mogę ograniczyć timer tylko 10 minut?
Dziękuję bardzo
Andrea
Timer.Stop()
po 120 kleszcze.
Zwróć uwagę na godzinę rozpoczęcia. W każdym wywołaniu sprawdź, czy currentTime + 5 sekund> startTime + 10 minut. Jeśli tak, wyłącz timer.
Preferuję to podejście, aby uruchomić po prostu dla N ticków, ponieważ nie można zagwarantować, że timery będą uruchamiane, gdy tego chcesz. Możliwe, że 120 tyknięć może przebiegać przez 10 minut czasu rzeczywistego.
po prostu użyj zmiennej DateTime, aby śledzić, kiedy powinna się zakończyć i ustawić ją tuż przed rozpoczęciem. Na twoim dotychczasowym programie obsługi zdarzeń sprawdź, czy czas sygnału jest krótszy niż czas zakończenia. Jeśli tak nie jest, zatrzymaj stoper.
Można obliczyć, ile razy funkcja będzie wywoływać funkcję i utworzyć licznik ubytków, po upływie którego zrezygnować z tykania zegara. Lub możesz uruchomić inny czasomierz, który ma okres zaznaczania - 10 min i po zaznaczeniu, że anulujesz subskrypcję licznika czasu, wywołując swoją funkcję.
Podziel Y minut przez interwał X, aby uzyskać ile razy trzeba uruchomić. Następnie wystarczy policzyć, ile razy funkcja została wywołana.
W twoim przypadku, 10 minut = 600 sekund/5 sekund = 120 połączeń potrzebnych. Wystarczy mieć licznik, aby śledzić, ile razy twoja funkcja została wywołana.
Przygotuj coś pętli czasowy takiego:
DateTime endTime = DateTime.Now.AddMinutes(10);
while(endTime < DateTime.Now)
{
// Process loop
}
Wolałbym przechowywać * czas zakończenia * i porównać go z wartością czasu teraźniejszego przed każdą iteracją. Niemniej jednak +1. – Cerebrus
Masz rację, przechowywanie czasu końcowego byłoby lepsze. –
Można ustawić dwa liczniki jeden uruchamianych przez 5 sekund, a drugi, że prowadzony przez 10 minut i wyłączyć pierwszy
Wystarczy uchwycić czas, który chcesz zatrzymać, i zakończ swój licznik od wewnątrz programu obsługi. Oto przykład (uwaga: użyłem zegara System.Threading.Timer Wybierz odpowiedni timer dla wykonywanej czynności, na przykład możesz być po System.Windows.Forms.Timer, jeśli piszesz w WinForm)
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.....
}
}
można użyć drugiego 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;
}
Negatywna miłość do prostej odpowiedzi? :) –