2015-08-28 2 views
-1

У меня есть таймер обратного отсчета времени, как это:Таймер становится все быстрее на последующих вызовах wp8.1

private DispatcherTimer _timer; 
    private int _countdown; 

    private void initialize_timer() 
    { 

     _countdown = 100; 
     _timer = new DispatcherTimer(); 
     _timer.Interval = TimeSpan.FromSeconds(1); 
     _timer.Tick += (s, e) => Tick(); 
     _timer.Start(); 
    } 
    private void Tick() 
    { 
     _countdown--; 
     if (_countdown == 0) 
     { 
      _timer.Stop(); 
     } 

     TimeSpan time = TimeSpan.FromSeconds(_countdown); 
     string str = time.ToString(@"dd\:hh\:mm\:ss"); 
     RemainingTime.Text = str; 
    } 

он работает отлично, пока я не позову initialize_timer() еще раз. таймер становится быстрее при каждом вызове. обратите внимание, что _countdown будет динамическим значением, основанным на будущем, поэтому он будет меняться при каждом вызове.

+0

'таймер становится быстрее' или вы получаете много' Tick() 's, включая старые? – Eser

+0

Я не знаю. я вижу все секунды, но быстрее меняю. – mhmt93t

ответ

0

Когда вы звоните initialize_timer(), вы создаете новый Timer, но ваш старый Timer все еще существует и тикает. Просто удалите линии

_timer = new DispatcherTimer(); 
_timer.Tick += (s, e) => Tick(); 

и все будет в порядке.

+0

, когда я удаляю его _timer становится null и сбой – mhmt93t

+1

Я думаю, что он имел в виду 'if (_timer == null) _timer = new DispatchTimer();', который инициализирует его один раз; но есть больше изменений. – Petesh

+0

теперь, что должно работать – mhmt93t

Смежные вопросы