为什么我不能调用new Window().ShowDialog()'2次在应用程序启动

本文关键字:2次 启动 应用程序 ShowDialog new 调用 Window 为什么 不能 | 更新日期: 2023-09-27 18:02:05

下面是XAML代码:

<Application x:Class="WpfApplication2.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup" />
支持代码:

using System.Windows;
namespace WpfApplication2
{
    public partial class App : Application
    {
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            new Window().ShowDialog();
            new Window().ShowDialog();
        }
    }
}

窗口只显示一次,然后应用程序退出。为什么? ?

UPDATE:我知道windows应该显示结果。但是在我关闭第一个窗口后第二个窗口根本没有显示

为什么我不能调用new Window().ShowDialog()'2次在应用程序启动

试试这个

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        var w1 = new Window();
        var w2 = new Window();
        w1.ShowDialog();
        w2.ShowDialog();
    }

粘贴表单注释:

我认为当你关闭第一个窗口时,应用程序检查是否有其他窗口,它没有找到任何(所以应用程序正在关闭),因为第二个窗口还没有创建

我说这将连续而不是同时显示两个窗口是对的吗?当window1关闭时,window2将自动打开,因为调用ShowDialog()打开窗口,然后将焦点设置为它,并且在window1关闭之前不打开另一个?

您可以使用for循环来完成此操作。但是,我不知道为什么不能直接打电话。

       for (int i = 0; i < 2; i++)
       {
            new Window().ShowDialog();
       }

您可能会在用于关闭窗口1的代码中结束整个应用程序。如果您使用的是Environment.Exit(0);,这可能是问题。

ShowDialog不允许你创建一个相同的表单,除非它关闭。

这是情态形式和非情态形式的区别。

我认为WPF也是同样的原因…

你可以看到↓

显示模式和非模式Windows窗体

更新:

测试Stecya的答案,它工作得很好…

protected override void OnStartup(StartupEventArgs e)
    {
        var w1 = new Window();
        var w2 = new Window();
        w1.ShowDialog();
        w2.ShowDialog();
    }