调用 Application.Shutdown() 后,使用 ShowDialog 显示 window 不起作用
After Application.Shutdown() is called, showing a window using ShowDialog doesn't work
当我的程序关闭时(由 Application.Shutdown() 启动),我在主程序 window 上捕获 Closing 事件。在处理程序中,我创建了一个对话框,询问用户是否要保存他们的工作。在这种特定情况下,用户无法取消应用程序关闭事件,这对我来说很好。
我发现如果我通过 ShowDialog 启动 "want to save" Window,window 永远不会显示。但是,MessageBox.Show 确实显示了 window。这是应用程序关闭期间的预期行为吗?我在文档中找不到有关此行为的任何内容。如果有人可以向我指出相关文档或此问题的详细答案,那就太好了。
Application.Shutdown 最终会停止您的应用程序的消息循环 (Dispatcher)。之后什么都不会发生UI。 MessageBox.Show 工作的唯一原因是因为它在应用程序的活动 window 上创建了自己的内部消息循环。
如果您使用 Application.Current.MainWindow.Close();
将允许您使用
e.Cancel = true;
,之后如果您使用 Application.Current.Shutdown();
,它将忽略取消标志并关闭 window。
这是假设您只使用一个 window,当然不需要再次显示您的提示。
类似于:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
DisplayCloseConfirmation();
}
根据评论编辑
当我的程序关闭时(由 Application.Shutdown() 启动),我在主程序 window 上捕获 Closing 事件。在处理程序中,我创建了一个对话框,询问用户是否要保存他们的工作。在这种特定情况下,用户无法取消应用程序关闭事件,这对我来说很好。
我发现如果我通过 ShowDialog 启动 "want to save" Window,window 永远不会显示。但是,MessageBox.Show 确实显示了 window。这是应用程序关闭期间的预期行为吗?我在文档中找不到有关此行为的任何内容。如果有人可以向我指出相关文档或此问题的详细答案,那就太好了。
Application.Shutdown 最终会停止您的应用程序的消息循环 (Dispatcher)。之后什么都不会发生UI。 MessageBox.Show 工作的唯一原因是因为它在应用程序的活动 window 上创建了自己的内部消息循环。
如果您使用 Application.Current.MainWindow.Close();
将允许您使用
e.Cancel = true;
,之后如果您使用 Application.Current.Shutdown();
,它将忽略取消标志并关闭 window。
这是假设您只使用一个 window,当然不需要再次显示您的提示。
类似于:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
DisplayCloseConfirmation();
}
根据评论编辑