2013-05-09 3 views
1

Я создал кнопку в C# для разработки Windows Phone 7. Он содержит анимацию, и при нажатии на нее я хочу, чтобы анимация отображалась, а затем для перехода к следующей странице.Задержка разработки Windows Phone 7 на кнопках

Использование Thread.Sleep(4000) просто вызывает сбой приложения, и мне было интересно, как я это делаю.

Есть ли способ отсрочить навигационный код?

private void batnballBtn_Click(object sender, RoutedEventArgs e) 
{ 
    NavigationService.Navigate(new Uri("/PictureGame.xaml", UriKind.Relative)); 
} 

ответ

2

Предположительно анимация является Storyboard. Вы можете перемещаться по событию Completed в Storyboard.

myStoryboard.Completed += (s, e) => 
{ 
    myStoryboard.Stop();   
    NavigationService.Navigate(new Uri("/PictureGame.xaml", UriKind.Relative)); 
}; 

Таким образом, вам не нужно, чтобы предсказать, как долго анимация будет принимать, что делает код более многократного использования, и вам не придется беспокоиться о работе с несколькими потоками вручную.

+0

Я вас люблю, большое вам спасибо –

+0

lol, добро пожаловать :) – keyboardP

1

Используйте нить для этого:

http://techkn0w.wordpress.com/2012/04/18/using-a-background-thread-in-windows-phone-7-wp7/

Вы останавливая поток пользовательского интерфейса, поэтому кнопка замораживанием.

Существует только один поток, ответственный за управление пользовательским интерфейсом, поэтому, если вы блокируете его при выполнении длительных операций или засыпаете, управление процессом пользовательского интерфейса замораживается, пока эта работа не завершится.

Что-то вроде этого:

private void batnballBtn_Click(object sender, RoutedEventArgs e) 
{ 
     ThreadPool.QueueUserWorkItem((WaitCallback)delegate(object state) 
     { 
      Thread.Sleep(4000); 

      this.Dispatcher.BeginInvoke((Action)delegate 
      { 
       NavigationService.Navigate(new Uri("/PictureGame.xaml", UriKind.Relative)); 
      }); 
     }); 
}