【问题标题】:How to reset a DispatcherTimer?如何重置 DispatcherTimer?
【发布时间】:2014-11-27 17:23:22
【问题描述】:

这些是我对 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>

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

【问题讨论】:

    标签: c# xaml windows-phone-8.1


    【解决方案1】:

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

    【讨论】:

    • 你不需要调用Stop(),调用Start()就可以重置定时器了。
    • 没错,但这样读代码没有意义。这是懒惰的程序员所做的假设(快捷方式),对于任何新阅读代码的人来说都会很奇怪。
    • 在哪里调用Stop()?我在InitTimer()Start() 之间尝试过,但它从停止的地方继续计数。
    • @KazaMaster 那是因为另一个问题。你的数学不正确。您永远不会重置 SpanTime = 0,而是不断添加它...
    • @Romasz 要重置计时器,您需要调用 Stop() 和 Start() .NET Reference Source: DispatcherTimer.Start()
    【解决方案2】:

    当您按下捕获按钮时,您需要(重新)设置您的SpanTime。 只是做

    SpanTime = new TimeSpan();
    

    它应该重置为零并重新开始,直到您再次按下按钮。

    【讨论】:

    • 我不太明白这个反对意见。当然我没有回答他的问题标题。但在他的描述中,他似乎想重置为用户显示的时间。所以我想我的答案就是他想要的
    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多