У меня есть приложение, которое требует нескольких таймеров обратного отсчета для запуска (некоторые одновременно). Они также обновляют элементы интерфейса с оставшимся временем на обратном отсчете. Я попытался использовать 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();
}