0

我正在 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,它是空白的。有什么帮助吗?

任何人都可以告诉我如何在后台线程中运行并且仍然以小时:分钟:秒格式显示时间。谢谢

4

2 回答 2

2

尝试

Dispatcher.BeginInvoke(new Action(() =>
{
    timerValue.Text = _sw.Elapsed.ToString().Substring(0, _sw.Elapsed.ToString().LastIndexOf(":") + 3);
}));

对于格式化,请尝试

.ToString(@"hh\:mm\:ss");
于 2013-05-16T13:53:33.583 回答
0

哦,劳德

myDispatcherTimer.Interval = new TimeSpan();

您将时间间隔设置为 0。这不是很有效。可能会从您的 UI 中敲出地狱。

UI中时间显示的分辨率是多少?秒?做这个:

myDispatcherTimer.Interval = TimeSpan.FromSeconds(1);

这可能足以满足检查。当它每秒只更改一次时,在毫秒级别更新 UI 是没有意义的。

于 2013-05-16T18:25:08.853 回答