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

时间:2011-07-15 08:26:42

标签: 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" />

支持代码:

using System.Windows;

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

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

更新:我知道窗户应该显示出来。但在我关闭第一个窗口后,第二个窗口没有显示

5 个答案:

答案 0 :(得分:5)

试试这个

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

        w1.ShowDialog();
        w2.ShowDialog();
    }

粘贴表单评论:

我认为当您关闭第一个窗口时,应用程序会检查是否有其他窗口,并且它没有找到任何窗口(因此应用程序正在关闭),因为第二个窗口尚未创建

答案 1 :(得分:0)

除非已关闭,否则ShowDialog不允许您创建相同的表单。

这是模态和无模式之间的区别。

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

你可以看到↓

Display Modal and Modeless Windows Forms

<强>更新

通过 Stecya 的回答进行测试,它运行正常......

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

        w1.ShowDialog();
        w2.ShowDialog();
    }

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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