如何制作实时秒表 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,但基本原理是相同的。
在高层次上,您的应用程序 运行 是一个连续循环,可以执行 某事,如下所示:
- 检查用户输入
- 运行 事件处理程序
- 更新布局
- 渲染新的UI
- 返回#1
因此,如果您在第 2 步中 运行 无休止的 while
循环,则 UI 永远不会更新,并且应用程序永远不会收到 [=] 的 Click
事件25=]停止按钮。你必须做一些事情,比如有一个 DispatcherTimer
(as suggested by @Igor Kulman) 定期检查秒表的值并更新 UI。
虽然我建议每秒不止一次;使用 TimeSpan.FromMilliseconds(33)
会给你每秒 30 帧。
我目前正在为 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,但基本原理是相同的。
在高层次上,您的应用程序 运行 是一个连续循环,可以执行 某事,如下所示:
- 检查用户输入
- 运行 事件处理程序
- 更新布局
- 渲染新的UI
- 返回#1
因此,如果您在第 2 步中 运行 无休止的 while
循环,则 UI 永远不会更新,并且应用程序永远不会收到 [=] 的 Click
事件25=]停止按钮。你必须做一些事情,比如有一个 DispatcherTimer
(as suggested by @Igor Kulman) 定期检查秒表的值并更新 UI。
虽然我建议每秒不止一次;使用 TimeSpan.FromMilliseconds(33)
会给你每秒 30 帧。