2013-05-09 2 views
1

J'ai créé un bouton en C# pour Windows Phone 7 développement. Il contient une animation et lorsque je clique dessus, je veux que l'animation soit affichée, puis pour que le bouton accède à la page suivante.Windows Phone 7 Délai de développement sur les boutons

L'utilisation de Thread.Sleep(4000) bloque simplement l'application et je me demandais comment je m'y prenais.

Y at-il un moyen de retarder le code de navigation?

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

Répondre

2

On peut supposer que l'animation est un Storyboard. Vous pouvez naviguer dans l'événement Completed du Storyboard.

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

De cette façon, vous n'avez pas besoin de prédire combien de temps l'animation prendra, ce qui rend le code plus réutilisable, et vous n'avez pas à vous soucier de traiter plusieurs threads manuellement.

+0

Je t'aime, merci beaucoup –

+0

lol, de rien :) – keyboardP

1

Utilisez un fil pour que:

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

Vous arrêter le thread d'interface utilisateur qui est la raison pour laquelle le bouton est le gel.

Un seul thread est responsable de la gestion de l'interface utilisateur. Par conséquent, si vous le bloquez lors de longues opérations ou si vous le faites dormir, la gestion des processus de l'interface utilisateur est gelée jusqu'à la fin du travail.

Quelque chose comme ceci:

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)); 
      }); 
     }); 
} 
Questions connexes