如何从后台线程运行计时器并在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,它是空白的。任何帮助吗?

谁能告诉我如何在后台线程运行,仍然显示小时:分钟:秒格式的时间。由于

如何从后台线程运行计时器并在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是没有意义的。