2017-01-22 9 views
0

私は単純なカウントダウンタイマープログラムを作ろうとしています。 2つのタイマーオブジェクトがあります。 timer1に時間がなくなると、それは停止し、timer2はカウントダウンを開始します。 timer2が不足すると、timer1が再び開始されます。C#:2タイマオブジェクトは機能しませんか?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     milli1--; 
     if(milli1 == -1) 
     { 
      sec1--; 
      milli1 = 59; 
      if (sec1 == -1) 
      { 
       min1--; 
       sec1 = 59; 

       if (min1 == -1) 
       { 

        min1 = 0; 
        sec1 = 0; 
        milli1 = 0; 
        Console.WriteLine("Timer1 stops!"); 
        timer1.Stop(); 
        timer2.Start(); 
       } 
      } 
     } 

     //updates displayed time 
    } 

しかし、タイマ1が停止したとき、タイマ2が起動していないよう:ここに私のコードです。どういうわけか、timer1はティッキングを続け、「Timer1 Stops!」を継続的に出力します。コンソールに。これをどうやって解決するのですか?

編集:ここに私のtimer2_Tickは(ある):

private void timer2_Tick(object sender, EventArgs e) 
    { 
     milli2--; 
     if (milli2 == -1) 
     { 
      sec2--; 
      milli2 = 59; 
      if (sec2 == -1) 
      { 
       min2--; 
       sec2 = 59; 

       if (min2 == -1) 
       { 
        min2 = 0; 
        sec2 = 0; 
        milli2 = 0; 
        timer2.Stop(); 
        timer1.Start(); 
       } 
      } 
     } 
     //updates displayed time 
    } 

EDIT 2:同じ間隔を持つ2つのタイマーは些細な問題です。タイマーの間隔が異なると、私のコードも機能しません。

+0

timer2の間隔とコードは、どのくらいですか?多分それは直ちに停止し、再びtimer1を開始するでしょうか?タイマー1を再利用できないのはなぜですか?また、あなたがしようとしていることを読んで理解するのは恐ろしいコードです。いくつかのネストを削除し、コードを再考しようとすることを検討してください。 –

+1

ところで、milli1がミリ秒を意味する場合、秒ではなく、1000秒になります。 –

+0

両方のタイマのティックイベントを登録するコードを表示 –

答えて

0

Windows.Forms.Timerとしてイベントドリブンではないため、コンソールアプリケーション用にタイマーを使用する理由がわかりません。スレッドタイマーを使用している可能性がありますが、このタイマーを使用しているときと同じようにコードが機能しません。だから私はWindowsフォームアプリケーションを作成し、コンソールに出力の種類を設定し、説明したようにタイマーを使用し、期待どおりに動作します。私はあなたがコンソールアプリケーションのようにタイマーを使うことはできないと思います。このコードは、ONEタイマーが同じことをするため、ほとんど意味がありません。コンソールアプリケーションを使用する必要がある場合は、次の投稿を確認してください。How do you add a timer to a C# console application

int milli1 = 0; 
int milli2 = 0; 
int sec1 = 0; 
int min1 = 0; 
int sec2 = 0; 
int min2 = 0; 

public Form1() { 
    InitializeComponent(); 
    timer1.Start(); 
} 

private void timer1_Tick(object sender, EventArgs e) { 
    Console.WriteLine("Timer1 tick!"); 
    milli1--; 
    if (milli1 == -1) { 
    sec1--; 
    milli1 = 59; 
    if (sec1 == -1) { 
     min1--; 
     sec1 = 59; 

     if (min1 == -1) { 

     min1 = 0; 
     sec1 = 0; 
     milli1 = 0; 
     //Console.WriteLine("Timer1 stops!"); 
     timer1.Stop(); 
     timer2.Start(); 
     } 
    } 
    } 
    //updates displayed time 
} 

private void timer2_Tick(object sender, EventArgs e) { 
    Console.WriteLine("Timer2 tick!"); 
    milli2--; 
    if (milli2 == -1) { 
    sec2--; 
    milli2 = 59; 
    if (sec2 == -1) { 
     min2--; 
     sec2 = 59; 

     if (min2 == -1) { 
     min2 = 0; 
     sec2 = 0; 
     milli2 = 0; 
     timer2.Stop(); 
     timer1.Start(); 
     } 
    } 
    } 
    //updates displayed time 
} 
} 
関連する問題