C# 为什么我能';t调用&x27;新建窗口().ShowDialog()和#x27;应用程序启动时2次?

C# 为什么我能';t调用&x27;新建窗口().ShowDialog()和#x27;应用程序启动时2次?,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,以下是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" /&g

以下是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" />
窗口仅显示一次,然后应用程序退出。为什么

更新:我知道windows应该会出现。但在我关闭第一个窗口后,第二个窗口根本不显示

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

        w1.ShowDialog();
        w2.ShowDialog();
    }
粘贴表单注释:


我认为,当您关闭第一个窗口时,应用程序会检查是否还有其他窗口,但找不到任何窗口(因此应用程序正在关闭),因为第二个窗口尚未创建,除非关闭,否则ShowDialog将不允许您创建同一表单

这是模态和非模态形式之间的区别

我认为WPF也是同样的原因

你可以看到↓

更新:

根据Stecya的答案进行测试,测试结果很好

protected override void OnStartup(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();
       }
for(int i=0;i<2;i++)
{
新建窗口().ShowDialog();
}

您可能在用于关闭窗口1的代码中结束整个应用程序。如果您正在使用类似于
Environment.Exit(0)的东西这可能就是问题所在。

如果您能重现这种情况,请留下评论这就是所有代码。正如您所看到的,没有
Environment.Exit()
调用。窗口是
System.Windows.Window
classIt不是关于模态和非模态的。我更新了我的问题以澄清这一点。我认为当您关闭第一个窗口时,应用程序会检查是否有其他窗口,但没有找到任何窗口(因此应用程序正在关闭),因为第二个窗口尚未创建。您的答案不是答案,但此注释是正确的。如果
ShutdownMode
更改为
OnExplicitShutdown
,则原始代码可以工作。那么为什么要将答案作为注释发布?把它作为答案贴出来,我会记下来的。
       for (int i = 0; i < 2; i++)
       {
            new Window().ShowDialog();
       }