使计时器减少实际秒数

时间:2015-10-07 15:59:57

标签: c# timer win-universal-app

我有这段代码:

df$Bracket1 <- gsub('(?:.*?\\[([^][]*)\\].*|.*)', '\\1', text, perl=T)
df$Bracket2 <- gsub('(?:.*?\\[[^][]*\\].*?\\[([^][]*)\\].*|.*)', '\\1', text, perl=T)
df$Bracket3 <- gsub('(?:.*?\\[[^][]*\\].*?\\[[^][]*\\].*?\\[([^][]*)\\].*|.*)', '\\1', text, perl=T)

此实例中的spinTime变量为6。我正在尝试使6代表小时,所以它将显示为06:00:00然后每次计时器打勾它将需要一秒钟的时间让06:00:00变为05:59:59然后05:59:58依旧..

我已经尝试将spinTime转换为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(); } 变量,但是它不起作用,看起来我没有沿着正确的路径去实现我想要做的事情。

有谁知道我做错了什么?

由于

3 个答案:

答案 0 :(得分:5)

我假设spinTime是TimeSpan类型。 您可以使用它来减少一秒钟。

            spinTime = spinTime.Subtract(TimeSpan.FromSeconds(1));

答案 1 :(得分:2)

我不会使用整数,而是使用DateTime来存储当前时间+ 6小时,并计算当前时间与“结束”时间之间的差异:

// right before starting timer
DateTime endTime = DateTime.Now.AddHours(6);

// in the `Tick` event:
spinnerTimer_txtBlock.Text = (endTime - DateTime.Now).ToString("hh\\:mm\\:ss");

答案 2 :(得分:1)

使用计时器“勾选秒数”是不可靠的。您不能保证每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

这样,您可以确保不依赖计时器来跟踪准确的时间。此外,您可以减少刻度线的长度以提高准确度。