У меня есть приложение, которое требует нескольких таймеров обратного отсчета для запуска (некоторые одновременно). Они также обновляют элементы пользовательского интерфейса с оставшимся временем обратного отсчета. Я попытался использовать DispatcherTimer, так как это простой способ взаимодействия с элементами пользовательского интерфейса. Тем не менее, за 300 секунд обратного отсчета он перестает синхронизироваться с реальным временем (из-за интенсивного обновления пользовательского интерфейса) до такой степени, что я получаю 30 секунд на таймере, когда он должен быть 0.Таймер обратного отсчета в случайных точках
Затем я попытался переключиться к System.Threading.Timer (код ниже). Теперь таймер находится на месте и синхронизируется с реальным временем жизни. Тем не менее, таймер прекращает тикать после случайного числа тиков (от 3 секунд до 60 секунд). Я подозреваю, что это либо сборщик мусора, либо Invoke (используемый для обновления пользовательского интерфейса), но на самом деле не имеет знаний продолжать этот путь. Может ли кто-нибудь дать мне представление о том, почему таймер случайно останавливается?
private int counter = 500;
private void btnTopBlue_Click(object sender, RoutedEventArgs e)
{
btnTopBlue.Content = counter.ToString();
Timer dt = new Timer(topBlue_Tick, null, 1000, 1000);
}
private void topBlue_Tick(object sender)
{
if (counter > 0)
{
counter--;
Dispatcher.BeginInvoke(() => btnTopBlue.Content = counter.ToString());
}
else
((Timer)sender).Dispose();
}
работал хорошо, спасибо за помощь! –