В моем предыдущем вопросе Я спросил о значении времени округления до ближайшей третьей минуты.
Что ж, теперь у меня есть некоторые проблемы с моим System.Threading.Timer, которые должны работать, когда наступит третья минута. Я делаю следующее:
private System.Timers.Timer WorkTimer;
//...
public void StartProccessing()
{
WorkTimer = new System.Timers.Timer();
WorkTimer.AutoReset = false;
WorkTimer.Elapsed += new ElapsedEventHandler(WorkTimer_Elapsed);
StartWorkTimer();
}
//...
private void StartWorkTimer()
{
WorkTimer.Interval = (CurrentTime.AddMinutes(3) - DateTime.Now).TotalMilliseconds;
WorkTimer.Start();
}
void WorkTimer_Elapsed(object sender, ElapsedEventArgs e)
{
WorkTimer.Stop();
this.ProcessData(this.CurrentTime);
StartWorkTimer();
}
Проблема в том, что когда таймер запущен - он не работает в первую третью минуту, он начинает работать после второй третьей минуты. Например:
Таймер запускается 15.02.2012 12: 20: 32.871, 15.02.2012 12: 21: 00.000 он должен работать WorkTimer_Elapsed, но его начало с 15.02.2012 12: 24: 01.871. Как это исправить?
Я фиксирую свое текущее время (из предыдущего вопроса):
private DateTime CurrentTime
{
get
{
DateTime now = DateTime.Now.AddSeconds(30);
DateTime val;
val = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0)
.AddMinutes(((now.Minute) / 3) * 3 - now.Minute);
return val;
}
}