2017-01-25 10 views
-1

誰かが私のウィンドウフォームアプリケーションでタイマーに遭遇している問題で私を助けてくれるのだろうかと疑問に思っています。ここで私が使用しているコードは次のとおりです。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(); 
     } 
    } 

私がいる問題は何も起こらないと私は何もすることができないんだ後、これはに適用されるウィンドウは、その後開かれ、いつでもということです。このコードを削除すると、ウィンドウが正常に動作するので、なぜこのコードセクションに関連して動作しないのか分かりません。何かご意見は?

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

と使用:ありがとう

+1

を 'game_Timer_Tick'は自動的にあなたがその中に独自のループを作るべきではない、すべてのタイマー間隔で発射する必要があります。 'while true 'を削除してください –

+1

アプリケーションには実際にラベルの更新を表示する時間がありません。 – TaW

答えて

7

あなたは、タイマー開始からの秒数を表示したい場合は、開始時刻を保持するためのフィールドを宣言:あなたは、タイマーを起動しているとき

private DateTime startTime; 

は、このフィールドを割り当てますそれティックハンドラで:

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(); 
} 
関連する問題