2017-05-12 4 views
-1

私はタイマーをそのように設定しました。しかし、より頻繁に発火する間隔が必要なので、クロックがより早くカウントされるようにする必要があります(シミュレーションでは、ユーザーがタイマーをカウントダウンするのを待つのが適切ではないため)。私がそれを適切に説明したことを願っています。何か質問があるかどうか質問してください。どんな助けも非常に高く評価されるでしょう!timespanを使用してタイマーのインターバルを設定しましたが、より頻繁に発生させたい

System.Windows.Forms.Timer timer; 
    TimeSpan countdownClock = TimeSpan.Zero; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     timer = new System.Windows.Forms.Timer();            //Initialise timer 
     timer.Interval = (int)TimeSpan.FromSeconds(1).TotalMilliseconds; 
     timer.Tick += OnTimeEvent; 
     DisplayTime(); 
    } 

    private void DisplayTime() 
    { 
     lblTime.Text = countdownClock.ToString(@"hh\:mm\:ss");         //Define timer 
    } 

    private void OnTimeEvent(object sender, EventArgs e) 
    { 
     countdownClock = countdownClock.Subtract(TimeSpan.FromMilliseconds(timer.Interval)); //Set up countdown 

     if (countdownClock.TotalMilliseconds <= 0) 
     { 
      countdownClock = TimeSpan.Zero; 
      timer.Stop(); 
      Button_Open.Enabled = true; 
     } 
     DisplayTime(); 
    } 
+0

つまり、時間の値をより頻繁に表示したいですか?他の(速い)タイマーを使うのはどうですか?限られた環境では、最初に高速タイマーを使用し、除算器を適用する。タイマーが100ミリ秒に設定されている場合、10イベント(デバイダ= 10)ごとにタイムアウトがチェックされます。あなたのケースでは、分周器は必要ないかもしれません。 Btw、それを計算するのではなく単に時間を保存し、それを 'DateTime.Now - storedDateTime'として計算すると、カウントダウンはタイマー頻度に対してより耐性があります。別のオプションは、 'Stopwatch'(タイマーと一緒に起動し、' Elapsed'を使用して値を表示し、タイマーで停止)を使用することです。 – Sinatr

+0

'timer.Interval = less then 1000' – EpicKip

+0

@EpicKipちょうど' int'値を追加しようとしましたが、目的の効果がありません –

答えて

1

「時間」を扱うここに二つのことがあります。

  • タイマーが
  • カウントダウン値が

が低下する速度を刻むする頻度ますインターバルを短くすることで、タイマーをより頻繁に変化させることができます。

// the timer will tick 3 times as often 
timer.Interval = (int)(TimeSpan.FromSeconds(1).TotalMilliseconds/3); 

タイマーの頻度は、タイマーの各ティックごとにカウントダウンからそのタイマーの間隔を減算するため、カウントダウンがゼロになる速度には影響しません。 System.Windows.Forms.Timerは非常に正確ではなく、できるだけ頻繁にあなたがそれを言うとダニではない可能性があることを

// countdown will reach 0 three times as fast as it would normally 
countdownClock = countdownClock.Subtract(TimeSpan.FromMilliseconds(timer.Interval * 3)); 

注:あなたはそれからより多くを引くたい場合は、ゼロに到達するカウントダウンのために必要な時間をスピードアップすることができ特に、わずか数ミリ秒の間隔を使用する場合は特にそうです。

+0

ありがとうございました!私は最初のオプションを実装しようとしましたが、それは効果がないようですか?また、私は2番目を試してみましたが、そのコンテキストで '*'演算子を使用させません –

+0

ああ、私はそれを間違って配置した、申し訳ありません、今すぐ右の場所に移動しました。最初のオプションは 'DisplayTime()'をより頻繁に呼び出させるだけです。一度実装すると気付くでしょう。 –

+0

ああ、それは素晴らしいです!できます!しかし、インスタンス* 3では、1秒ごとではなく3秒間隔でカウントダウンします。 1秒ごとにカウントダウンする方法はありますか? –

関連する問題