2014-11-27 6 views
1

Я следовал примеру из Head First C# на DispatcherTimer.DispatcherTimer будет увеличивать интервал за каждый раз, когда он используется

Первый раз, когда я нажимаю кнопку, тикер увеличивается на 1 секунду, но в следующий раз, когда я нажимаю на кнопку, тикер будет увеличиваться на 2 секунды для каждой секунды/галочки. Третий таймер увеличивается с 3 секундами и так далее (1 секунда добавляется для каждого нажатия кнопки).

Почему это и как «перезагрузить» интервал тикера, чтобы он увеличивался только на 1 секунду каждый раз?

Вот код:

DispatcherTimer timer = new DispatcherTimer(); 
    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     timer.Tick += timer_Tick; 
     timer.Interval = TimeSpan.FromMilliseconds(1000); 
     timer.Start(); 
     CheckHappiness(); 
    } 
    int i = 0; 
    void timer_Tick(object sender, object e) 
    { 
     ticker.Text = "Tick #" + i++; 
    } 

    private async void CheckHappiness() 
    { 
     ... code .. 
     timer.Stop(); 
    } 
    } 
    } 

Ура!

+0

Вы продолжаете добавлять обработчики событий для события Tick. Поэтому во второй раз, когда вы нажимаете кнопку, метод timer_Tick() будет работать дважды. Наверняка не то, что вы намеревались. Подписывайте событие только один раз в конструкторе. И используйте переменную для значения свойства Interval. –

+0

Также вы вызываете 'timer.Stop()' в 'CheckHappiness', и это может привести к тому, что ваш таймер не будет создавать события, основываясь на том, что' ... code ..' делает –

ответ

1
timer.Tick += timer_Tick; 

Эта строка добавляет метод к обработчику событий каждый раз, когда вы нажимаете кнопку; в котором вы делаете i ++, который увеличивает i на единицу. Если у вас есть два метода, которые делают это в одно и то же время (так как таймер указывает на ваш интервал), вы получаете увеличение на два каждые галочки таймера.