2015-11-28 2 views
0

У меня есть код, как это в Windows Phoneтаймер в Windows Phone

private void btnrun_Click(object sender, RoutedEventArgs e) 
{ 
    t = 0; 
    Start_timer(); 
} 

public void Start_timer() 
{ 
    timer2 = new DispatcherTimer(); 
    timer2.Tick += timer_Tick2; 
    timer2.Interval = new TimeSpan(0, 0, 0, 0, 1000); 
    timer2.Start(); 
} 

void timer_Tick2(object sender, object e) 
{ 
    t++; 
    txttime.Text = t.ToString(); 
} 

При первом использовании, дисплей прямо с 1,2,3,4 ..., но при нажатии кнопки еще раз, он начинается с 2, 4, 6 .... нажмите еще раз, дисплей 3, 6 ... Есть ли способ запустить дисплей при нажатии кнопки 1,2,3,4 каждый сбой? спасибо !!!

+0

Вы должны остановить первоначальный таймер, прежде чем начать новый. –

ответ

0

попробовать что-то вроде этого:

private void btnrun_Click(object sender, RoutedEventArgs e) 
{ 
    t = 0; 
    Start_timer(); 
} 

public void Start_timer() 
{ 
    if (timer2 != null) 
    { 
     timer2 -= timer_Tick2; // unassigns the event handler 
     timer2.Stop(); // stops the timer 
    } 
    timer2 = new DispatcherTimer(); 
    timer2.Tick += timer_Tick2; 
    timer2.Interval = new TimeSpan(0, 0, 0, 0, 1000); 
    timer2.Start(); 
} 

void timer_Tick2(object sender, object e) 
{ 
    t++; 
    txttime.Text = t.ToString(); 
} 

EDIT: Если вы просто хотите, чтобы запустить таймер один раз, он может быть сокращен до:

private void btnrun_Click(object sender, RoutedEventArgs e) 
{ 
    t = 0; 
    if (timer2 == null) 
     Start_timer(); 
} 

public void Start_timer() 
{ 
    timer2 = new DispatcherTimer(); 
    timer2.Tick += timer_Tick2; 
    timer2.Interval = new TimeSpan(0, 0, 0, 0, 1000); 
    timer2.Start(); 
} 

void timer_Tick2(object sender, object e) 
{ 
    t++; 
    txttime.Text = t.ToString(); 
} 
+0

Спасибо, он работает –

+0

Рад, что это сработало, отметьте как ответ –

+0

Почему бы просто не использовать повторно существующий таймер? Не нужно воссоздавать его каждый раз. –

0

Используйте метод Stop(), чтобы остановить таймер каждый раз, прежде чем запускать его снова.

private void btnrun_Click(object sender, RoutedEventArgs e) 
     { 
      t = 0; 
      timer2.Stop(); 
      Start_timer(); 
     } 

регистры Каждый таймер на той же Tick обратного вызова:

timer2.Tick += timer_Tick2; 

так что причина этой проблемы.

+0

Выполнение этого на btnrun_Click вызовет исключение NullReferenceException при первом нажатии кнопки и таймер никогда не запустится (по крайней мере, с указанным кодом) –

+0

Да, это истинный таймер должен быть инициализирован. – marcinax

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