Интервал указывается в миллисекундах. Одна секунда равняется
1 000 миллисекунд.
Соответственно
25 000 миллисекунд - это
25 секунд.
// счетчик секунд
int secondsCounter = 0;
var s500A2 = new System.Timers.Timer();
// интервал - одна секунда
s500A2.Interval = 1000;
// обработчик истечения интервала
s500A2.Elapsed += (sender, e) => { // имена sender и e можно поменять, если будут проблемы
Console.WriteLine("Прошла секунда");
// увеличиваем значение счетчика
secondsCounter++;
if (secondsCounter >= 10)
{
Console.WriteLine("Всего прошло 10 секунд");
secondsCounter = 0;
}
};
s500A2.Start();
Либо можно установить
Interval в значение
10 000, тогда
Elapsed будет вызываться каждые
10 секунд.
Однако с точность все не так просто. Есть незначительная погрешность (в миллисекундах), которая со временем будет расти и в какой-то момент может потеряться секунда. Если точность критична, то лучше использовать меньшие значения.
Следующий пример демонстрирует погрешность относительно текущего времени:
// интервал - одна секунда
s500A2.Interval = 1000;
s500A2.Elapsed += (sender, e) => {
Console.WriteLine("Прошла секунда: {0:HH:mm:ss.fff}", DateTime.Now);
};
// На выходе будет примерно это:
// Прошла секунда: 14:18:20.950
// Прошла секунда: 14:18:21.964
// Прошла секунда: 14:18:22.978
// Прошла секунда: 14:18:23.992
// Прошла секунда: 14:18:25.006 // потеряли 14:18:24
// Прошла секунда: 14:18:26.020
// Прошла секунда: 14:18:27.034
В следующем примере показано решение проблемы с потерей секунд:
int lastSecond = 0;
// интервал - десять миллисекунд
s500A2.Interval = 10;
s500A2.Elapsed += (sender, e) => {
int currentSecond = DateTime.Now.Second;
if (currentSecond != lastSecond)
{
Console.WriteLine("Прошла секунда: {0:HH:mm:ss.fff}", DateTime.Now);
lastSecond = currentSecond;
}
};