Я занимаюсь разработкой игровых приложений в Windows Phone 8, который показывает истекшее время (чч: мин: сс) для игрока, так что в моем 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);
}
прямо сейчас мой код работает отлично, но только проблема у него есть он работает в потоке пользовательского интерфейса и в Windows Phone 8 тестирования просит меня, чтобы проверить и поставить в фоновый поток. Я попытался использовать поток рабочего потока, но это не обновляет пользовательский интерфейс, он пуст. Любая помощь?
может любое тело сказать мне, как работать в фоновом потоке и по-прежнему отображать время в часе: мин. Сек. Формат. Благодаря
Спасибо за ваш ответ, но этот 'Dispatcher.BeginInvoke (новый Action (() => {}' кусок кода будет запущен в потоке пользовательского интерфейса, справа? И метод 'Every_Tick (object sender, EventArgs e)' а также в потоке пользовательского интерфейса. Так что же он делает? Ответьте мне – Debhere
Возможно, я неправильно понял первоначальное требование. Я думал, что вы хотите взаимодействовать с компонентами в своем основном потоке из другого потока. Вы не можете сделать это напрямую, потому что 2 потока независимы друг от друга, поэтому вам нужен диспетчер, чтобы управлять им. – DaveDev