2017-01-25 10 views
-1

Эй, просто интересно, может ли кто-нибудь помочь мне с проблемой, с которой я сталкиваюсь с таймером в приложении для форм Windows. Вот код, я использую:Visual Studio 2015 C# Задачи таймера

private void game_Timer_Tick(object sender, EventArgs e) 
    { 
     while (true) 
     { 
      int count = 0; 
      count++; 
      timeLabel.Text = TimeSpan.FromSeconds(count).ToString(); 
     } 
    } 

Проблема у меня в том, что всякий раз, когда открывается окно, что это относится и к, а затем после этого ничего не происходит, и я не могу ничего сделать. При удалении этого кода окно прекрасно работает, поэтому я не уверен, почему он не работает в отношении этого раздела кода. Есть предположения? Благодаря

+1

'game_Timer_Tick' автоматически огонь на каждом интервале таймера, вы не должны сделать свой собственный цикл внутри этого. remove 'while true' –

+1

У вашего приложения нет времени, чтобы действительно показывать обновления на этикетке. – TaW

ответ

7

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

private DateTime startTime; 

Связать это поле, когда вы начинаете таймер:

game_Timer.Interval = 1000; // fire event each second 
startTime = DateTime.Now; 
game_Timer.Start(); 

и использовать это в Tick обработчиком:

private void game_Timer_Tick(object sender, EventArgs e) 
{ 
    timeLabel.Text = (DateTime.Now - startTime).ToString(); 
} 

Что не так с вашим кодом? У вас бесконечный цикл внутри обработчика событий Tick. Поэтому, когда событие срабатывает в первый раз, вы входите в этот цикл и никогда не выходите из него. И вы ничего не можете сделать, потому что ваше приложение занято постоянной меткой времени обновления.

Вы также можете использовать счетчик вместо сохранения времени начала таймера. Но вам нужно поле в любом случае:

private int count = 0; 

И обработчик события:

private void game_Timer_Tick(object sender, EventArgs e) 
{ 
    timeLabel.Text = TimeSpan.FromSeconds(++count).ToString(); 
}