【问题标题】:Why Window.ShowDialog runs the application?为什么 Window.ShowDialog 运行应用程序?
【发布时间】:2017-02-16 21:44:57
【问题描述】:

我尝试在运行 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();
    }

为什么会出现这种行为???

谢谢

【问题讨论】:

  • 显示您用于Show 的代码 - 您不能在if 中使用它,因为它不返回布尔值。
  • 您是故意对 wpf 的工作原理感到好奇,还是只是想解决在显示主窗口之前显示对话框的问题?
  • @Default 首先我想解决这个问题,如果可能的话。但我也想了解为什么会这样。我的问题不是 WPF showing dialog before main window 的重复

标签: c# wpf


【解决方案1】:

ShowDialog 开始自己的消息循环。它的作用与Application.Run 几乎相同,并且由于您已经创建了应用程序的一个实例,因此启动消息(嗯,调度)已经发送,并将由ShowDialog 中的消息循环(调度程序)解释. Show 基本上只向队列发送消息,因此除非有消息循环处理消息,否则它不会做任何事情。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2019-04-08
    • 2021-03-13
    • 2020-05-06
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多