为什么Window.ShowDialog运行应用程序?

时间:2017-02-16 21:44:58

标签: c# wpf

我尝试在runnig wpf应用程序之前打开对话框窗口:

public class Program
{
    [STAThread]
    public static void Main(string[] args)
    {
        var app = new App();
        var win = new MainWindow();
        if (win.ShowDialog().GetValueOrDefault())
        {
            app.Run();  
        } 
    }
}

class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        var win = new Window1();
        win.Show();
    }
}

为什么win.ShowDialog()运行应用程序(app.OnStartup被执行)? 但是,win.Show()并没有运行应用程序

    [STAThread]
    public static void Main(string[] args)
    {
        var app = new App();
        var win = new MainWindow();
        win.Show();
        app.Run();
    }

为什么会出现这种情况???

由于

1 个答案:

答案 0 :(得分:0)

ShowDialog启动自己的消息循环。它与Application.Run几乎完全相同,并且由于您已经创建了应用程序的实例,因此已经发送了启动消息(井,调度),并且将由{@中的消息循环(调度程序)解释。 {1}}。 ShowDialog基本上只向队列发送消息,因此除非有消息循环处理消息,否则它不会执行任何操作。

如果要在注册启动之前显示对话框,请不要在显示对话框之前创建应用程序实例。