我的应用程序出现问题,当从主程序窗口生成的模式对话框正常关闭时,意外结束。没有未处理的异常被抛出,并且在主应用程序窗口中没有触发Closing
或Closed
事件。
基本上我有一个主/ shell窗口,它使用ShellWindow.Show()在应用程序代码中启动。通过菜单,用户可以生成一个自定义打开的对话框,这是一个新窗口,然后使用ShowDialog显示(窗口所有者设置为shell窗口的那个)。
当对话框关闭时(在内部,通过调用_modalDialogWindow.Close()的命令)应用程序关闭,而我只希望模式对话框关闭。
调试代码表明ShellWindow是从内存中转储的,因为_modalDialogWindow.Close()之后的下一行代码是静态程序代码中的Application.Run()。
如果有人有任何想法,我愿意尝试任何事情。
答案 0 :(得分:4)
看来,由于MVVM / Ioc方式,我正在设计应用程序窗口,因此关闭事件的传播范围超出了应有的范围。我不明白这个!
但是,将Application.ShutDownMode设置为Explicit会阻止应用程序过早关闭,现在我已经拥有了所需的行为。
顺便说一句,启用declyclone建议的所有异常并没有产生任何在窗口关闭时内部抛出的异常。
答案 1 :(得分: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();
}
}
我也遇到了这个问题,你的回答帮助我找出原因。