2017-08-06 3 views
0

リアルタイムで16秒経過するとタイマーを止めようとしていますが、どうすればいいのか分かりません。どのようにリアルタイムで秒数秒でタイマーを停止できますか?

私はこの小さな例を作った:picturebox1がpicturebox2と交差するとき、このアクションはタイマーを作動させ、このタイマーはリアルタイムで16秒間にpicturebox3を表示し、それを停止した後(タイマー)(picturebox3はショー)。

(スペイン語のStackOverflowには多くの情報がありません)私は、WindowsフォームとC#

private void timer2_Tick(object sender, EventArgs e) 
    { 
     pictureBox7.Hide(); 
     if ((pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible) || (pictureBox5.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible)) 
     {     
      puntaje++; 
      this.Text = "Puntaje: " + puntaje; 
      if (puntaje % 5 == 0) 
      { 
       timer3.Enabled=true; 
//This is the part where i want set down the timer3, timer 2 is on 

      } 
     } 
+0

タイマーは非常に正確である必要がありますか?ちょうど16.000000000000秒ですか?そのレベルの精度がない場合は、 'System.Timers.Timer.Elapsed'イベント(https://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed(v=vs) .110).aspx) – Svek

答えて

0

私はこれが実装され見ることができるクリーンな方法は、System.Timers.Timerの間隔パラメータを使用することです。

ここでは、コードのサンプルスニペットは

var timer = new Timer(TimeSpan.FromSeconds(16).TotalMilliseconds) { AutoReset = false }; 
timer.Elapsed += (sender, e) => 
{ 
    Console.WriteLine($"Finished at exactly {timer.Interval} milliseconds"); 
}; 
_timer.Start(); 

TimeSpan.FromSeconds(16).TotalMillisecondsは、基本的には、16000に変換しますが、私はあなたが簡単にそれを理解するためのTimeSpan静的メソッドを使用して読みやすくなります。

タイマーのAutoResetプロパティは、1度だけトリガする必要があることを通知します。

これはあなたの問題を解決するかどうか回答の質問をマークにしてください、あなたのコード

private void timer2_Tick(object sender, EventArgs e) 
{ 
    pictureBox7.Hide(); 
    if ((pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible) 
     || (pictureBox5.Bounds.IntersectsWith(pictureBox2.Bounds) && pictureBox2.Visible)) 
    {     
     puntaje++; 
     this.Text = "Puntaje: " + puntaje; 
     if (puntaje % 5 == 0) 
     { 
      var timer3 = new Timer(TimeSpan.FromSeconds(16).TotalMilliseconds) { AutoReset = false }; 
      timer3.Elapsed += (sender, e) => 
      { 
       pictureBox3.Visible = true; 
      }; 
      timer3.Start(); 
     } 
    } 
} 

のために調整しました。

+0

どのように私はこのコードの中に含めることができますか?私は非常に混乱しています... private void timer2_Tick(オブジェクト送信者、EventArgs e){ pictureBox7.Hide(); if((pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds)&& pictureBox2.Visible)||(pictureBox5.Bounds.IntersectsWith(pictureBox2.Bounds)&& pictureBox2.Visible)) { puntaje ++; this.Text = "Puntaje:" + puntaje; if(puntaje%5 == 0){ timer3.Enabled = true; } } –

+0

@ DannyJ.Parrあなたの投稿にそのコードを追加して、それに応じて編集できます – DevEstacion

+0

コードを追加しました –

1

を使用してい

あなたのタイマーティックイベントハンドラで、これを試すことができます。 Timespanは、2つの日付の間の経過時間をカウントします。この場合、16秒以来、負の数でカウントします。

private void timer1_Tick(object sender, EventArgs e) 
    { 
     TimeSpan ts = dtStart.Subtract(DateTime.Now); 
     if (ts.TotalSeconds <= -16) 
     { 
      timer1.Stop(); 
     } 
    } 

あなたのDTSTART(日時)を確認してくださいあなたのタイマーを起動したときに宣言されています

timer1.Start(); 
dtStart = DateTime.Now; 
関連する問題