自定义WPF对话框窗口导致shell窗口在调用.Show后立即关闭

自定义WPF对话框窗口导致shell窗口在调用.Show后立即关闭,wpf,windows,c#-4.0,modal-dialog,prism-4,Wpf,Windows,C# 4.0,Modal Dialog,Prism 4,嗯。一点设置 我有一个使用Unity的基于PRISM的小应用程序 我创建了一个独立于主程序的类,其中shell窗口包含自己的WPF窗口,在更新运行时作为对话框弹出 该类在PoC和窗口更新用户的进度时,会复制一些真正简单的文件 窗口以模式显示。ShowDialog;因此,它会在更新运行时阻止线程 更新将从ContentRendered事件中运行 更新完成后,将在窗口上调用.Close 在主程序的App.xaml.cs文件的OnStartup事件中,通过调用名为StartUpdate的类上的公共函数

嗯。一点设置

我有一个使用Unity的基于PRISM的小应用程序

我创建了一个独立于主程序的类,其中shell窗口包含自己的WPF窗口,在更新运行时作为对话框弹出

该类在PoC和窗口更新用户的进度时,会复制一些真正简单的文件

窗口以模式显示。ShowDialog;因此,它会在更新运行时阻止线程

更新将从ContentRendered事件中运行

更新完成后,将在窗口上调用.Close

在主程序的App.xaml.cs文件的OnStartup事件中,通过调用名为StartUpdate的类上的公共函数来实例化该类并启动更新过程

然后,创建并运行引导程序

最后,在bootstrapper类中,加载了一些模块,它们除了注册视图之外什么都不做,shell窗口被解析并显示在InitializeShell的覆盖中

所有标准的东西,除了程序在退出InitializeShell后才关闭。如果我没有在updater类中调用.Close并让用户关闭与X的自定义对话框,同样的事情也会发生。我还尝试了用非模态的方式显示对话框。Show和程序的其他部分都很好。但是,进程不会阻塞,因此更新将在主程序加载之后或加载时进行。这是毫无意义的。我找到了一些解决这个问题的方法。我只是好奇是否有人能解释这种行为

编辑:示例代码段: 当用户关闭Window1窗口时,不会加载主窗口

/// <summary>
/// Interaction logic for App.xaml. This is where the program starts.
/// </summary>
public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        dialogWPF.Class1 c = new dialogWPF.Class1();

        c.Update();

        //After this, the program should continue as normal (Open the MainWindow window)
    }
}

/// <summary>
/// This is the code for Class1 that is called in App.xaml.cs
/// </summary>
public class Class1
{
    private Window1 _win;

    public Class1()
    {
        _win = new Window1();
    }

    public void Update()
    {
        _win.ShowDialog();
    }



}

猜测一下:是否将shell窗口设置为应用程序主窗口,如下所示:

Application.Current.MainWindow = shell;

在初始值设置中,是“hell override”吗?否则,您的更新对话框可能是应用程序主窗口,导致应用程序在关闭后退出。

您能用代码描述一下发生了什么吗;这有点模糊,也有点难以理解。请将关闭模式更改为明确。您需要将其精简为示例代码以复制和发布,您的对话框是否可以只返回对话框结果而不调用Close,我的怀疑是,由于对话框是首先创建的,因此它会成为应用程序主窗口,因此调用close会退出该过程。我必须检查是否将关闭模式设置为显式。对于返回的DialogResult,实际上没有从窗口返回任何信息,它只是让用户知道发生了什么。虽然我确实希望它会以某种方式成为应用程序主窗口。是的,我在InitializeShell覆盖中设置了这样的shell。