WPF ShowDialog在第二次调用时立即返回null

WPF ShowDialog在第二次调用时立即返回null,wpf,null,return,showdialog,Wpf,Null,Return,Showdialog,我认为这是WPF框架中的一个bug,在没有深入了解我的程序以及我为什么要这么做的情况下,我编写了一个简单的测试应用程序来证明我的理论 这个问题能否得到证实?在将应用程序放入其运行循环之前,执行一系列对话框的可能解决方法是什么 using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Windows;

我认为这是WPF框架中的一个bug,在没有深入了解我的程序以及我为什么要这么做的情况下,我编写了一个简单的测试应用程序来证明我的理论

这个问题能否得到证实?在将应用程序放入其运行循环之前,执行一系列对话框的可能解决方法是什么

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace ShowDialogWindow
{
  /// <summary>
  /// Interaction logic for App.xaml
  /// </summary>
  public partial class App : Application
  {
    protected override void OnStartup(StartupEventArgs e)
    {
       Window testWindow = new Window();
       testWindow.ShowDialog();
       testWindow.Close();
       // THE CODE BELOW WILL NOT SHOW THE NEXT WINDOW
       Window testWindow2 = new Window();
       testWindow2.ShowDialog();
       testWindow2.Close();
    }
  }
}
使用系统;
使用System.Collections.Generic;
使用系统配置;
使用系统数据;
使用System.Linq;
使用System.Windows;
名称空间显示对话框窗口
{
/// 
///App.xaml的交互逻辑
/// 
公共部分类应用程序:应用程序
{
启动时受保护的覆盖无效(StartupEventArgs e)
{
窗口测试窗口=新窗口();
testWindow.ShowDialog();
testWindow.Close();
//下面的代码不会显示下一个窗口
Window testWindow2=新窗口();
testWindow2.ShowDialog();
testWindow2.Close();
}
}
}
更新: 当然,我可以改变我的设计,以适应这种行为。然而,我想做的其实很简单

我已从
应用程序
派生出我的
MyApplication
。在
Main()
上,我启动了一系列启动检查,例如许可证信息、启动屏幕、连接和配置检查等。当我的所有问题都解决后,我调用
myapplicationom.Run(MyMainForm)

此设计基于一个正常的Windows应用程序,它可以正常工作

非常感谢您的帮助,我会记住,您不能在
application.Run()
之前调用
ShowDialog()
,因为它只会初始化关机。然而,我本以为只有在执行
App.Run()
指令之后才应该启动关机序列


如果我理解错了,请纠正我。

不是错误。
应用程序
的默认
关闭模式
OnLastWindowClosed
,因此,一旦第一个窗口关闭,应用程序将立即开始关闭!更改为
OnExplicitShutdown
将正常工作,但您必须管理关闭


我想你可能只需要重新思考一下你到底想要实现什么。为什么在应用程序启动期间会显示两个后续对话框窗口?

对于存在相同问题的任何人,以下是您解决问题的方法:

public App()
{
    // Preserve and temporarily switch shutdown mode
    var oldShutdownMode = ShutdownMode;
    ShutdownMode = ShutdownMode.OnExplicitShutdown;

    var dialog = new Window();
    var result = dialog.ShowDialog();
    dialog = new Window();
    result = dialog.ShowDialog(); // This will show!

    // Reset shutdown mode to original value
    ShutdownMode = oldShutdownMode;    
}

如果能对否决票作出解释,我们将不胜感激。这个答案中有什么我需要改进的地方吗?