【问题标题】:WPF ShowDialog returns null immediately on second callWPF ShowDialog 在第二次调用时立即返回 null
【发布时间】:2010-11-17 15:32:36
【问题描述】:

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

更新:

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

我从Application 派生了我的MyApplication。在Main() 上,我启动了一系列启动检查,例如,许可证信息、启动屏幕、连接和配置检查等。当我明白了,我打电话给MyApplicatiom.Run(MyMainForm)

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

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

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

【问题讨论】:

    标签: wpf null return showdialog


    【解决方案1】:

    不是错误。 Application 的默认 ShutdownModeOnLastWindowClosed,所以只要第一个窗口关闭,您的应用程序就会开始关闭!更改为 OnExplicitShutdown 即可,但您必须管理关机。

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

    【讨论】:

    • 对否决票的解释将不胜感激。这个答案有什么我需要改进的地方吗?
    【解决方案2】:

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

    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;    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      相关资源
      最近更新 更多