WPF模态对话框关闭意外结束应用程序

5
我有一个问题,当主程序窗口产生的模态对话框正常关闭时,我的应用程序会意外结束。在主应用程序窗口上没有抛出未处理的异常,也没有触发任何“Closing”或“Closed”事件。
基本上,我有一个主/Shell窗口,它是使用ShellWindow.Show()在应用程序代码中启动的。通过菜单,用户可以产生一个自定义的打开对话框,这是一个新窗口,然后使用ShowDialog显示(窗口所有者设置为Shell窗口)。
当对话框被关闭(内部由一个命令调用_modalDialogWindow.Close())时,应用程序关闭,而我只希望模态对话框关闭。
调试代码表明,ShellWindow从内存中删除了,因为_modalDialogWindow.Close()后的下一行代码是在静态程序代码中退出Application.Run()。
如果有人有任何想法,我愿意尝试任何东西。

尝试在所有异常上设置断点。转到“调试”>“异常”,并检查常见语言运行时异常的“抛出”列。这将导致调试器在任何异常上中断,而不仅仅是未处理的异常。这应该有助于您定位问题所在。 - decyclone
2个回答

5

看起来,由于我正在设计的MVVM / Ioc方式,应用程序窗口关闭事件正在传播得比它们应该传播得更远。我不理解这个问题!

然而,将Application.ShutDownMode设置为Explicit可以防止应用程序过早关闭,我现在有了期望的行为。

顺便说一句,打开所有异常(如declyclone建议的)并没有产生在窗口关闭时内部抛出的任何异常。


1
在创建应用程序之前,请不要创建任何窗口,否则它们将无法正确注册。它们不会显示在Application.Current.Windows或Application.Current.MainWindow中。然后,当您创建对话框窗口时,您的应用程序将认为它既是MainWindow又是唯一的窗口。
以下是不应该做的示例:
public partial class App : Application, ISingleInstanceApp
{
    MyWindow win = new MyWindow(); //BAD! this is called inside new App(), but before the actual App constructor.

    [STAThread]
    public static void Main()
    {
        if (SingleInstance<App>.InitializeAsFirstInstance(Unique))
        {
            var application = new App();

            application.InitializeComponent();
            application.Run();

            // Allow single instance code to perform cleanup operations
            SingleInstance<App>.Cleanup();
        }
    }

我也遇到了这个问题,你的答案帮助我弄清了原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接