In my previos question I asked about rounding time value to nearest third-minute. Well now I have some issues with my System.Threading.Timer that must work when is third-minute time is come. I Do following:
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();
}
Problem is that the when timer started - it is not work in first third-minute time, its begin working after second third-minute time. For example: Timer is started at 15.02.2012 12:20:32.871, in 15.02.2012 12:21:00.000 it must work WorkTimer_Elapsed, but its begin from 15.02.2012 12:24:01.871. How to fix this? I fix my CurrentTime time (from previos question):
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;
}
}