【问题标题】:Custom WPF dialog window causes shell window to close immediately after .Show called自定义 WPF 对话框窗口导致 shell 窗口在 .Show 调用后立即关闭
【发布时间】:2013-11-18 21:52:56
【问题描述】:

好的。一点设置。

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

我创建了一个类(与 shell 窗口所在的主程序分开),其中包含它自己的 WPF 窗口,以便在更新运行时作为对话框弹出。

该类会进行一些文件复制(真正简单的东西,就像 PoC),并且窗口会向用户更新其进度。

窗口以模态方式显示 (.ShowDialog();) 以便在更新运行时阻塞线程。

更新是在 ContentRendered 事件之外运行的。

更新完成后,在窗口上调用 .Close()。

在主程序的 App.xaml.cs 文件的 OnStartup 事件中,该类被实例化并开始更新过程(通过调用名为 StartUpdate() 的类的公共函数)。

之后,会创建并运行一个引导程序。

最后,在引导程序类中,一些模块被加载(它们除了注册一个视图外不做任何事情),shell 窗口被解析并显示在 InitializeShell 的覆盖中。

所有非常标准的东西,除了程序在退出 InitializeShell 后才关闭。如果我不在更新程序类中调用 .Close 并让用户使用 X 关闭自定义对话框,也会发生同样的事情。我还尝试以非模态方式(仅 .Show())显示对话框,程序的其余部分工作正常。但是,该过程不会阻塞,因此更新将在主程序加载之后或加载时发生。那将毫无意义。我找到了一些解决方法。我只是好奇是否有人可以解释这种行为。

编辑:示例代码 sn-p: 当用户关闭 Window1 窗口时,MainWindow 永远不会加载。

/// <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();
    }



}

【问题讨论】:

  • 你能描述一下代码中发生了什么吗?这有点毛茸茸,有点难以理解。
  • 将关机模式更改为显式
  • 您需要将其缩减为示例代码以重现并发布该代码
  • 你的对话框能否只返回一个DialogResult 而不是调用Close(),我怀疑由于对话框首先创建它成为应用程序MainWindow,所以调用close 退出进程。
  • 我必须检查将关机模式设置为显式。就返回的 DialogResult 而言,实际上没有从窗口返回任何信息,它只是为了让用户知道发生了什么。虽然我确实希望它以某种方式成为应用程序 MainWindow。

标签: wpf windows c#-4.0 modal-dialog prism-4


【解决方案1】:

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

Application.Current.MainWindow = shell;

InitializeShell() 覆盖?否则,您的更新对话框可能是应用程序的主窗口,并导致应用程序在关闭后退出。

【讨论】:

  • 是的,我在 InitializeShell() 覆盖中设置了类似的 shell。
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 2011-09-21
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多