我在C#中为Windows Phone 7开发创建了一个按钮。它包含一个动画,点击后我想要显示动画,然后按钮导航到下一页。
使用Thread.Sleep(4000)
只会崩溃应用程序,我想知道我是如何解决此问题的。
有没有办法延迟导航代码?
private void batnballBtn_Click(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/PictureGame.xaml", UriKind.Relative));
}
答案 0 :(得分:2)
据推测,动画是Storyboard
。您可以在故事板的Completed
事件中导航。
myStoryboard.Completed += (s, e) =>
{
myStoryboard.Stop();
NavigationService.Navigate(new Uri("/PictureGame.xaml", UriKind.Relative));
};
这样您就不需要预测动画需要多长时间,使代码更具可重用性,而且您不必担心手动处理多个线程。
答案 1 :(得分:1)
使用线程:
http://techkn0w.wordpress.com/2012/04/18/using-a-background-thread-in-windows-phone-7-wp7/
你正在停止UI线程,这就是按钮冻结的原因。
只有一个线程负责管理UI,因此,如果您在进行冗长的操作或使其休眠时阻止它,则UI流程管理将被冻结,直到该工作完成。
这样的事情:
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));
});
});
}