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

15 wpf null return showdialog

我认为这是WPF框架中的一个错误,没有进入我的程序的深度,为什么我正在做我正在做的事情,我写了一个简单的测试应用程序来证明我的理论.

这个问题可以确认吗?在将应用程序放入其运行循环之前,要执行的一系列对话框有哪些可能的解决方法?

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();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:

当然,我可以改变我的设计,以适应这种行为.我试图做的事情非常简单.

我有我的派生MyApplicationApplication.在此Main(),我启动了一系列启动检查,例如,许可证信息,启动画面,连接和配置检查等.当我清楚的时候,我打电话给你MyApplicatiom.Run(MyMainForm).

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

非常感谢你的帮助,我会记得ShowDialog()以前你不能打电话,application.Run()因为它只是无关紧要.不过我会想到关机序列只能在一条App.Run()指令后启动.

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

Ken*_*art 27

不是错误.默认ShutdownModeApplication就是OnLastWindowClosed,所以只要第一窗口关闭您的应用程序将启动关闭!改为OnExplicitShutdown,它会工作,但你必须管理关机.

我想你可能只需要重新思考你实际想要实现的目标.为什么在应用程序启动期间会显示两个后续对话框窗口?


qJa*_*ake 5

对于遇到同样问题的任何人,以下是解决该问题的方法:

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;    
}
Run Code Online (Sandbox Code Playgroud)