15

我认为这是 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();
    }
  }
}

更新:

当然我可以改变我的设计来适应这种行为。然而,我想要做的其实很简单。

我已经MyApplicationApplication. 在 上Main(),我启动了一系列启动检查,例如许可证信息、启动屏幕、连接和配置检查等。当我明白了一切后,我打电话给MyApplicatiom.Run(MyMainForm)

此设计基于正常运行的正常 Windows 应用程序。

非常感谢您的帮助,我会记住您ShowDialog()之前不能打电话,application.Run()因为它只是初始化关机。然而,我会认为关闭序列应该只在App.Run()指令之后启动。

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

4

2 回答 2

30

不是错误。默认ShutdownMode值为ApplicationOnLastWindowClosed因此一旦关闭第一个窗口,您的应用程序就会开始关闭!更改为OnExplicitShutdown它会起作用,但您必须管理关机。

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

于 2009-08-07T09:49:20.207 回答
4

对于任何有同样问题的人,以下是您可以解决的方法:

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;    
}
于 2014-04-15T15:27:46.707 回答