如何重置DispatcherTimer?

15

以下是我的 DispatcherTimer 声明和方法:

private DispatcherTimer DishTimer;
private TimeSpan SpanTime;
private void InitTimer()
{

    DishTimer = new DispatcherTimer();
    DishTimer.Interval = new TimeSpan(0, 0, 0, 1);
    DishTimer.Tick += TimerOnTick;

}
private void TimerOnTick(object sender, object o)
{
    SpanTime = SpanTime.Add(DishTimer.Interval);
    Duration.DataContext = SpanTime;
}        

这是我调用它的地方:

private void CaptureButton_Click(object sender, RoutedEventArgs e)
{
    if ((string) CaptureButton.Content == "Capture")
    {

        CaptureAudio();
        InitTimer();
        DishTimer.Start();

        ProgressRing.IsActive = true;
        CaptureButton.Content = "Stop";
    }
    else
    {
        StopCapture();
        DishTimer.Stop();
        ProgressRing.IsActive = false;
        CaptureButton.Content = "Capture";
    }

}

这是显示计时器的XAML代码:

<TextBlock Name="Duration" Text="{Binding}"  HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"></TextBlock>

我正在制作一个语音录制应用程序,每次用户按下“捕获”按钮时,我希望显示一个计时器。 我的问题是我无法重置它。

2个回答

26

调用Stop()然后再调用Start()应该会重新启动计时器间隔。


12
不需要调用Stop(),调用Start()就足以重置计时器。 - Romasz
1
在哪里准确地调用 Stop()?我尝试在 InitTimer()Start() 之间调用,但它继续从停止的位置计数。 - kazama
2
@KazaMaster 这是因为另一个问题。你的数学计算有误。你从未将 SpanTime 重置为0,而是一直在累加它... - Chubosaurus Software
你应该使用Stopwatch类来计算总经过时间。定时器不是很可靠,而且定时器错误会累积。你仍然需要一个定时器来触发Tick事件,并根据Stopwatch经过的时间设置下一个间隔,以防止定时器错误累积。 - AndrewS
5
要重置计时器,您需要调用Stop()和Start()方法。 .NET参考资料源代码:DispatcherTimer.Start() - marbel82
显示剩余3条评论

9
您需要在按下“捕获”按钮时重新设置您的SpanTime。只需执行

SpanTime = new TimeSpan();

应该将其重置为零并重新启动,直到再次按下按钮。


1
我真的不理解这个踩票。当然,我没有回答他的问题标题。但在他的描述中,看起来他想重置显示给用户的时间。所以我认为我的答案是他想要的。 - chrosey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接