我正在开发Windows Phone 8中的游戏应用程序,向玩家显示已用时间(hh:min:ss)格式,因此在我的用户界面中
<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,它是空白的。有什么帮助吗?
任何机构都可以告诉我如何在后台线程中运行并仍以小时:min:sec格式显示时间。 感谢
答案 0 :(得分:2)
尝试
Dispatcher.BeginInvoke(new Action(() =>
{
timerValue.Text = _sw.Elapsed.ToString().Substring(0, _sw.Elapsed.ToString().LastIndexOf(":") + 3);
}));
要进行格式化,请尝试
.ToString(@"hh\:mm\:ss");
答案 1 :(得分:0)
哦合法
myDispatcherTimer.Interval = new TimeSpan();
您将间隔设置为0的时间间隔。这不是非常有效。可能会破坏你的用户界面。
UI中时间显示的分辨率是多少?秒?这样做:
myDispatcherTimer.Interval = TimeSpan.FromSeconds(1);
这可能足以满足检查要求。当毫秒级每秒只更改一次时,毫无意义地在毫秒级更新UI。