使计时器减少实际秒数
Make timer decrement actual seconds
我有这个代码:
public void startSpinTimer()
{
spinTimer = new DispatcherTimer();
spinTimer.Tick += spinTimer_Tick;
spinTimer.Interval = new TimeSpan(0, 0, 0, 1);
spinTimer.Start();
}
void spinTimer_Tick(object sender, object e)
{
spinTime--;
spinnerTimer_txtBlock.Text = spinTime.ToString();
}
在此实例中,spinTime 变量为 6。我试图让 6 代表小时,所以它会显示为 06:00:00 然后每次计时器滴答时它都会花一秒钟的时间使 06:00:00 更改为 05:59:59然后 05:59:58 依此类推..
我已经尝试将 spinTime 转换为 DateTime
变量,但是它不起作用,看起来我没有沿着正确的路径来实现我想要做的事情。
有谁知道我做错了什么吗?
谢谢
我假设spinTime 是TimeSpan 类型。
你可以用它来减少一秒。
spinTime = spinTime.Subtract(TimeSpan.FromSeconds(1));
我不会使用整数,而是使用存储当前时间 + 6 小时的 DateTime
,并计算当前时间与 "end" 时间之间的差异:
// right before starting timer
DateTime endTime = DateTime.Now.AddHours(6);
// in the `Tick` event:
spinnerTimer_txtBlock.Text = (endTime - DateTime.Now).ToString("hh\:mm\:ss");
使用计时器 "tick off seconds" 是不可靠的。您不能保证滴答声会恰好每 1 秒发生一次。相反,我建议如下:
DateTime start = DateTime.Now; //On the start of the timer store the current time
TimeSpan spinTime = new TimeSpan (6,0,0); //Time to spin
在每个报价单上计算当前时间和开始时间之间的差异:
TimeSpan delta = DateTime.Now-start; //Time elapsed since start
TimeSpan timeRemaining = spinTime - delta; //Time remaining
这样您就可以确保您不会依赖计时器来记录准确的时间。此外,您可以缩短刻度线的长度以提高准确性。
我有这个代码:
public void startSpinTimer()
{
spinTimer = new DispatcherTimer();
spinTimer.Tick += spinTimer_Tick;
spinTimer.Interval = new TimeSpan(0, 0, 0, 1);
spinTimer.Start();
}
void spinTimer_Tick(object sender, object e)
{
spinTime--;
spinnerTimer_txtBlock.Text = spinTime.ToString();
}
在此实例中,spinTime 变量为 6。我试图让 6 代表小时,所以它会显示为 06:00:00 然后每次计时器滴答时它都会花一秒钟的时间使 06:00:00 更改为 05:59:59然后 05:59:58 依此类推..
我已经尝试将 spinTime 转换为 DateTime
变量,但是它不起作用,看起来我没有沿着正确的路径来实现我想要做的事情。
有谁知道我做错了什么吗?
谢谢
我假设spinTime 是TimeSpan 类型。 你可以用它来减少一秒。
spinTime = spinTime.Subtract(TimeSpan.FromSeconds(1));
我不会使用整数,而是使用存储当前时间 + 6 小时的 DateTime
,并计算当前时间与 "end" 时间之间的差异:
// right before starting timer
DateTime endTime = DateTime.Now.AddHours(6);
// in the `Tick` event:
spinnerTimer_txtBlock.Text = (endTime - DateTime.Now).ToString("hh\:mm\:ss");
使用计时器 "tick off seconds" 是不可靠的。您不能保证滴答声会恰好每 1 秒发生一次。相反,我建议如下:
DateTime start = DateTime.Now; //On the start of the timer store the current time
TimeSpan spinTime = new TimeSpan (6,0,0); //Time to spin
在每个报价单上计算当前时间和开始时间之间的差异:
TimeSpan delta = DateTime.Now-start; //Time elapsed since start
TimeSpan timeRemaining = spinTime - delta; //Time remaining
这样您就可以确保您不会依赖计时器来记录准确的时间。此外,您可以缩短刻度线的长度以提高准确性。