如何从后台线程运行计时器并在UI线程中显示结果
本文关键字:线程 UI 结果 显示 计时器 后台 运行 | 更新日期: 2023-09-27 18:13:49
我正在开发一款Windows phone 8游戏应用,它会向玩家显示经过的时间(hh:min:ss)格式,所以在我的UI
<StackPanel x:Name="statusPanel2" >
<TextBlock x:Name="tbTimer" Text=" Time: " />
<TextBlock x:Name="timerValue" Text="{Binding ''}" />
后面的代码我开始计时器当游戏开始
private void gamestart()
{
myDispatcherTimer.Interval = new TimeSpan();
myDispatcherTimer.Tick += new EventHandler(Each_Tick);
myDispatcherTimer.Start();
_sw.Start(); }
private void Each_Tick(object sender, EventArgs e)
{
timerValue.Text = _sw.Elapsed.ToString().Substring(0, _sw.Elapsed.ToString().LastIndexOf(":") + 3);
}
现在我的代码工作得很好,但唯一的问题是它在UI线程中运行,在Windows Phone 8测试中要求我检查并放入后台线程。我尝试使用后台工作线程,但这不会更新UI,它是空白的。任何帮助吗?
谁能告诉我如何在后台线程运行,仍然显示小时:分钟:秒格式的时间。由于
Try
Dispatcher.BeginInvoke(new Action(() =>
{
timerValue.Text = _sw.Elapsed.ToString().Substring(0, _sw.Elapsed.ToString().LastIndexOf(":") + 3);
}));
对于格式化,请尝试
.ToString(@"hh':mm':ss");
天哪
myDispatcherTimer.Interval = new TimeSpan();
将时间间隔设置为0。这不是很有效。可能会让你的UI一团糟。
UI中时间显示的分辨率是多少?秒?这样做:
myDispatcherTimer.Interval = TimeSpan.FromSeconds(1);
这可能足以满足检查。当UI每秒只改变一次时,在毫秒级更新UI是没有意义的。