如何制作实时秒表 Windows Phone 8.1 通用应用

How to create a real time stopwatch Windows Phone 8.1 universal app

我目前正在为 windows phone 8.1 创建一个秒表应用程序,我正在使用秒表 class 但我似乎找不到连续更新屏幕计时器的方法.我尝试在秒表运行时循环更新文本块,但这不会更新,直到方法结束并导致无限循环。

    private void Button_Click(object sender, RoutedEventArgs e)
    {

        if (!stopwatch.IsRunning)
            _sw.Start();

        while (stopwatch.IsRunning)
            this.sw.Text = stopwatch.Elapsed.ToString();
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        stopwatch.Stop();
    } 

使用 DispatcherTimer,将 Interval 设置为 1 秒,并在其 Tick 事件中更新 TextBlock

问题是 GUI 环境通常不会按照您假设的方式工作(在循环执行时不断更新 UI 并监听用户交互)。您应该看看 this MSDN page - 它是关于 WPF 而不是 Windows XAML,但基本原理是相同的。

在高层次上,您的应用程序 运行 是一个连续循环,可以执行 某事,如下所示:

  1. 检查用户输入
  2. 运行 事件处理程序
  3. 更新布局
  4. 渲染新的UI
  5. 返回#1

因此,如果您在第 2 步中 运行 无休止的 while 循环,则 UI 永远不会更新,并且应用程序永远不会收到 [=] 的 Click 事件25=]停止按钮。你必须做一些事情,比如有一个 DispatcherTimer (as suggested by @Igor Kulman) 定期检查秒表的值并更新 UI。

虽然我建议每秒不止一次;使用 TimeSpan.FromMilliseconds(33) 会给你每秒 30 帧。