2017-06-23 5 views
0

私は基本的なタイマを作成し、起動ボタンをクリックするたびにプログラムが完全にフリーズすることにしました。私は何か明白な何かを逃している?ボタンをクリックした後、Windowsのfourmがクラッシュする

namespace Timer 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btn_Start_Click(object sender, EventArgs e) 
     { 
      int secs = 0, mins = 0, hours = 0; 

      for (int num1 = 1; num1 > 0;) 
      { 
       txt_secs.Text = secs.ToString() ; 
       System.Threading.Thread.Sleep(1000); 
       secs = secs + 1; 

       if (secs == 60) 
       { 
        secs = 0; 
        mins = mins + 1; 
        txt_mins.Text = mins.ToString(); 
       } 
       if (mins == 60) 
       { 
        mins = 0; 
        hours = hours + 1; 
        txt_hours.Text = hours.ToString(); 
       } 
      } 
     } 
    } 
} 
+0

あなたは多分あなたのためのループでNUM1をインクリメントしていませんか? – MoonBoots89

+0

フォームアプリケーションのUIスレッドで 'System.Threading.Thread.Sleep(1000);'を実行しないでください。無限ループがあります。 –

+1

forループ( 'num1 <= 100'のような)の終了条件を定義するか、完了したらループを抜けます。定期的なジョブでは、別のスレッドで実行され、ユーザインタフェースをブロックしない 'System.Timer'を使います。 – dlatikay

答えて

0

問題が中断されますMicrosoft Documentationあなたのスレッド毎のSystem.Threading.Sleep()

です。スレッドは無限ループにあるため、(本質的に)永続的に中断されます。 (あなたがスレッドが必要な場合)

TimersまたはStopwatch Classかを使用することを検討してSystem.Threading.Timer代わり

関連する問題