Я предполагаю, что вы уже что-то пробовали, и что это дрейфует.
Если вы хотите, чтобы что-то срабатывало, скажем, каждые 5 секунд от часа (5,10,15,20 ..),Вы можете установить таймер на срабатывание один раз, а затем в обратном вызове сбросить таймер на значение DateTime.Now + количество секунд до следующего интервала в 5 секунд.
Это предотвратит любой дрейф, пока ваши часыэто правильно.
Как-то так
System.Timers.Timer timer = new Timer();
void Init()
{
timer.Elapsed += timer_Elapsed;
int wait = 5 - (DateTime.Now.Second % 5);
timer.Interval = wait*1000;
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
int wait = DateTime.Now.Second % 5;
timer.Interval = wait * 1000;
timer.Start();
}