如何在 WPF 中的 MainWindow 之前像启动画面一样打开子窗口? [英] How to open a child Window like a splash screen before MainWindow in WPF?

查看:34
本文介绍了如何在 WPF 中的 MainWindow 之前像启动画面一样打开子窗口?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个 xaml.一个是 MainWindow,另一个是 NewWindow.我想在程序运行时显示 NewWindow 5 秒.5 秒后,我想显示 MainWindow.

I have two xaml. One is MainWindow and other is NewWindow. I want show NewWindow 5 seconds, when program is run. And after 5 seconds, I want show MainWindow.

如何在 WPF 中更改 xaml?

How to change xaml in WPF?

这是主窗口.

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>

</Grid>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
}

这是新窗口.

<Window x:Class="WpfApplication2.NewWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="NewWindow" Height="300" Width="300">
<Grid>

</Grid>

public partial class NewWindow : Window
{
    public NewWindow()
    {
        InitializeComponent();
    }
}

推荐答案

有很多方法可以做到这一点.正如一些人所建议的,如果您尝试创建启动画面,我也建议不要这样做,有更好的方法可以做到这一点.但是..这里是你要求的:

There are plenty ways to do this. As some people suggested i suggest too to DO NOT DO THIS if you're trying to create a splash screen, there are better ways to do that. But.. here what you asked for:

using System.ComponentModel; //Remember to add this

public partial class MainWindow : Window
{
    private BackgroundWorker waitingWorker = new BackgroundWorker();
    private NewWindow myNewWindow = new NewWindow();

    public MainWindow()
    {
        InitializeComponent();

        waitingWorker.DoWork += waitingWorker_DoWork;
        waitingWorker.RunWorkerCompleted += waitingWorker_RunWorkerCompleted;

        waitingWorker.RunWorkerAsync();
    }

    private void waitingWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        myNewWindow.Show();
        this.Close();
    }

    private void waitingWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        Thread.Sleep(5000);
    }
}

这是一个简单的后台工作者,等待 5 秒钟,然后打开 NewWindow 并关闭 MainWindow.是的,您也可以在没有后台工作者的情况下完成此操作,但是 Thread.Sleep(5000); 将完全冻结您的 GUI 并使您的小应用程序无响应,因此您需要另一个线程等待主线程可以让您的 GUI 保持活力.我建议你至少研究一下后台工作者是如何工作的.

it's a simple background worker that waits for 5 seconds, then opens the NewWindow and close MainWindow. Yes, you can do it without background worker too, but Thread.Sleep(5000); will totally freeze your GUI and make your little app unresponsive, so you need another thread to wait while the main thread can keep your GUI alive. I suggest you to study at least how a background worker works.

这里 官方 MSDN 文档,但谷歌是你的朋友,你可以找到大量关于它的教程和解释

HERE the official MSDN documentation, but google is your friend and you can find tons of tutorial and explanation about it

这篇关于如何在 WPF 中的 MainWindow 之前像启动画面一样打开子窗口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆