Используйте System.Timers.Timer
и установите для его AutoReset
значение false, и запускайте его только по окончании предыдущего или в соответствии с вашими условиями. Вот образец, который я использую:
private System.Timers.Timer _timer = new System.Timers.Timer();
private volatile bool _requestStop = false;
private void InitializeTimer()
{
_timer.Interval = 100;
_timer.Elapced += OnTimerElapced;
_timer.AutoReset = false;
_timer.Start();
}
private void OnTimerElapced(object sender, System.Timers.TimerEventArgs e)
{
//_timer.Stop();//if AutoReset was not false
//do work....
if (!_requestStop)
{
_timer.Start();//restart the timer
}
}
private void Stop()
{
_requestStop = true;
_timer.Stop();
}
private void Start()
{
_requestStop = false;
_timer.Start();
}
Редактировать: Если вам нравится смотреть таймер и если операция занимает больше времени, то вам не следует использовать таймер, вместо этого используйте обертывание в новой операции нить и использовать MaunalResetEvent
, используйте метод WaitOne
, чтобы указать время ожидания, если время ожидания истекло, остановите или о операции.