[英]How to count down and display time before next timer tick?
我正在嘗試使用一個計時器,該計時器每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();
}
}
首先,我不確定您要做什么,也不確定以10毫秒為間隔,您正在推動計時器的最低分辨率。 看到這個問題 。 話雖如此,您可以嘗試使用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();
}
}
似乎您正在嘗試計算兩個時間間隔,即長間隔和短間隔,而長間隔是短間隔的倍數。
如果效率不是最重要的(不太可能如此),那么我想我將只有一個計時器來對較短的間隔進行計時。 您知道多少個“短滴答聲”等於一個“長滴答聲”,所以只需記下已有多少個短滴答聲,當您有足夠的時間時,觸發“長滴答聲事件”即可。
使用兩個計時器,您可以獲得各種比賽條件。 您的“短勾”可能會在“長勾”之前觸發,或者反之亦然。 這兩個計時器可能彼此之間有抖動(盡管它們在平均水平上大約是正確的),所以在任何給定時間都不會先觸發哪個計時器。 使用單個計時器,您可以控制所有這些因素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.