2012-01-10 9 views
0

私は5秒ごとにまたはユーザーが指定した時間間隔で何かを行う1つのタイマーを持っていることを試みています。次のタイマーティックまでの時間をカウントダウンして表示する方法は?

ここで、最初のタイマーの目盛りまで10ミリ秒間隔でカウントダウンする機能が必要です。私は周りに遊んで、最初のタイマーのティック間隔の1/10のカウントを行うことでこれを行う簡単な方法を見つけたが、数を数えるときは何も表されません。

どのようにカウントダウンするのですか?

これは私がこの時点で持っている方法ですが、私はそれを変更したい:すべての

private void tmrClickInterval_Tick(object sender, EventArgs e) 
    { 
     if (nudPlusMinus.Value == 0) tmrClickInterval.Interval = int.Parse(nudClickInterval.Value.ToString()); 
     else tmrClickInterval.Interval = random.Next(int.Parse(nudClickInterval.Value.ToString()) - int.Parse(nudPlusMinus.Value.ToString()), int.Parse(nudClickInterval.Value.ToString()) + int.Parse(nudPlusMinus.Value.ToString())); 

     if (tmrClickInterval.Interval/10 == 0) tmrNextClick.Interval = 1; 
     else tmrNextClick.Interval = tmrClickInterval.Interval/10; 
     tmrNextClick.Start(); 
     content++; 
     nextClick = tmrClickInterval.Interval; 
     label1.Text = content.ToString(); 
    } 

    private void tmrNextClick_Tick(object sender, EventArgs e) 
    { 
     if (nextClick <= 0) tmrNextClick.Stop(); 
     else 
     { 
      nextClick = nextClick - (tmrClickInterval.Interval/10); 
      lblNextClickCount.Text = (nextClick/100).ToString(); 
     } 
    } 

答えて

2

まず、私はまた、10ミリ秒間隔で、あなたは、あなたがやろうとしている正確に何のわかりませんタイマーの最小解像度を押します。これはSO questionを参照してください。それはDiagnostics.Stopwatchクラスを使ってあなたのTickイベントの間隔を計ることができると言われています。このような何か:

private void tmrClickInterval_Tick(object sender, EventArgs e) 
    { 
     stopWatch.Stop(); 
     stopWatch.Reset();   
     stopWatch.Start(); 
     tmrNextClick.Start(); 
     content++; 
     label1.Text = content.ToString(); 
    } 

    private void tmrNextClick_Tick(object sender, EventArgs e) 
    { 
     nextClick = (((tmrClickInterval.Interval) - stopWatch.ElapsedMilliseconds)/10) * 10; 
     if (!(nextClick < 0)) 
     { 
      lblNextClickCount.Text = nextClick.ToString(); 
     } 
    } 
+0

私はその考えが好きです。 +1。 – HelpNeeder

2

あなたは長い間隔が短い間隔の倍数であるwhre 2つの間隔、長い間隔と短い間隔を、カウントしようとしているように思えます。

効率が本質的ではない(その可能性は低い)とすれば、私は短い間隔の時間を計る単一のタイマーしか持たないと思う。どれくらいの「短いダニ」が「長いダニ」と等しいか知っているので、そこにいくつの短いダニがあるのか​​を十分に把握しておけば、「長いダニイベント」を起こすことができます。

2つのタイマーを使用すると、あらゆる種類の競合状態を取得できます。あなたの「短い刻み目」は「長い刻み目」の前に発火するかもしれないし、逆に起こるかもしれない。 2つのタイマーはお互いにジッタがあるかもしれません(平均的にはほぼ正しいとは言えますが)ので、どのタイミングで最初に発火するかはわかりません。単一のタイマーを使用すると、これらのすべての要因を制御できます。

関連する問題