2012-01-10 32 views
0

我想有一個計時器,它會每5秒鐘或用戶指定的時間間隔做事。如何在下一個計時器滴答之前倒計時並顯示時間?

現在,我想有一個函數,它將以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 2012-01-10 02:30:04

2

好像你正試圖計算兩個間隔,間隔長和短的時間間隔,whre長間隔的時間很短的倍數。

如果效率不是本質的(它不太可能),那麼我認爲我只需要一個計時器來縮短時間間隔。你知道有多少「短嘀嗒」等於「長剔」,所以只需要記下多少次短蜱的數量以及足夠的時間,然後解除「長蜱」事件。

有了兩個定時器,您可以獲得各種競爭條件。您的「短嘀嗒」可能會在「長剔」之前觸發,或者可能以相反的方式發生。兩個計時器可能相對於彼此有抖動(雖然它們平均大約是正確的),所以不知道在任何給定時間哪個會先發射。通過一個計時器,您可以控制所有這些因素。