1

我在 C# 中为 Windows phone 7 开发创建了一个按钮。它包含一个动画,单击时我希望显示动画,然后让按钮导航到下一页。

使用Thread.Sleep(4000)只是使应用程序崩溃,我想知道如何解决这个问题。

有没有办法延迟导航代码?

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

2 回答 2

2

大概动画是一个Storyboard。您可以在 Storyboard 的Completed事件中导航。

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

这样你就不需要预测动画要花多长时间,使代码更可重用,而且你不必担心手动处理多个线程。

于 2013-05-09T11:58:51.853 回答
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));
            });
        });
}
于 2013-05-09T11:51:37.960 回答