在Windows Phone中显示/隐藏ContentPanel的内容

时间:2014-04-30 13:49:51

标签: c# windows-phone-8

当用户启动应用程序5秒钟然后将他带到应用程序时,我希望我的App徽标可见。我正在做这样的事情。

MainPage.xaml中

<Grid x:Name="ContentPanel" LayoutUpdated="ContentPanel_LayoutUpdated">
            <Image Name="startLogo" Source="/Assets/startScreen.png"></Image>
            <phone:WebBrowser Name="webView"
                              IsScriptEnabled="True"
                              Grid.Row="0"
                              IsGeolocationEnabled="True"
                              ScriptNotify="webView_ScriptNotify"
                              NavigationFailed="webView_NavigationFailed"
                              Navigated="webView_Navigated"
                              Navigating="webView_Navigating"
                              SizeChanged="webView_SizeChanged"
                              VerticalAlignment="Stretch">
                </phone:WebBrowser>

</Grid>

MainPage.xaml.cs中

public MainPage()
        {
            InitializeComponent();
            startLogo.Visibility = System.Windows.Visibility.Visible;
            webView.Visibility = System.Windows.Visibility.Collapsed;
            Thread displayStartScreen = new Thread(() =>
            {
                this.Dispatcher.BeginInvoke(() =>
                {
                    Thread.Sleep(5000);
                    startLogo.Visibility = System.Windows.Visibility.Collapsed;
                    webView.Visibility = System.Windows.Visibility.Visible;
                });
            });
            displayStartScreen.Start();
        }

但有了这个,应用程序在前5秒内没有显示任何内容,然后显示webView 我在这做错了什么。有什么帮助吗?

由于

2 个答案:

答案 0 :(得分:2)

Thread.Sleep(5000);在显示startLogo之前阻止整个UI线程事件。当睡眠停止时,它会显示webView正确等待。

请尝试使用以下代码替换调度程序:

this.Dispatcher.BeginInvoke(async () =>
{
    await Task.Delay(5000);
    startLogo.Visibility = System.Windows.Visibility.Collapsed;
    webView.Visibility = System.Windows.Visibility.Visible;
});

这样只有调度员将被暂停,徽标将显示5秒钟。 希望这会有所帮助。

答案 1 :(得分:0)

我弄明白了这个错误。把

Thread.Sleep(5000);

内部调度员让我的主线程处于睡眠状态。我刚从那里删除它并把它放在行

之前
this.Dispatcher.BeginInvoke(() =>

这将使displayStartScreen线程处于睡眠而不是主线程。现在工作正常。

由于