Вместо того, чтобы пытаться вычислить время из итератора, вычислите его, используя системные часы.
Изменить тип basetime
на DateTime
.
Когда вы запускаете таймер, установите базовое время: basetime = DateTime.Now;
И установите переменную TimeSpan
равной количеству времени для обратного отсчета: countdown = new TimeSpan(/*your code here*/);
Теперь обновите ваш timer_Tick
примерно так:
void timer_Tick (object sender, object e)
{
var now = DateTime.Now;
// This computes the remaining time and formats it for display
txt.Text = (now - basetime).ToString("hh:mm:ss");
// Checks that the timer is complete
if (now - basetime > countdown)
{
/* stop the timer */
}
}
DispatcherTimer
не совсем точен, он приблизителен, что для большинства задач достаточно, но для отслеживания времени недостаточно. Вместо этого вы можете использовать его, чтобы приблизить секунду, а затем обновить свой таймер фактическим временем из системных часов.