i have a countdown timer like this:
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;
}
it works fine until i call initialize_timer() again. the timer gets faster on every call. note that _countdown will be a dynamic value based on a future time so it will change on each call.
When you call initialize_timer()
, you create a new Timer
but your old Timer
is still there and ticking. Just remove the lines
_timer = new DispatcherTimer();
_timer.Tick += (s, e) => Tick();
and you'll be OK.