C# 如何判断是通过关闭按钮关闭还是通过WPF中的应用程序关闭?

C# 如何判断是通过关闭按钮关闭还是通过WPF中的应用程序关闭?,c#,wpf,C#,Wpf,我在this.Closing 我的主窗口的事件 它在从gui关闭时按预期工作,但是我想在通过application.Shutdown()关闭应用程序时禁用此检查 在关闭窗口之前,应用程序中没有触发任何事件,并且无法覆盖Shutdown方法 如何检测是什么导致了窗口关闭?谁调用了Application.Shutdown()?如果你负责这件事,只需设置一个标志,表明你做了这件事,并在关闭事件处理程序中检查该标志。免责声明:如果可以的话,我会将此作为评论而不是回答,因为这是一个肮脏的黑客行为(不是干净

我在
this.Closing
我的主窗口的事件

它在从gui关闭时按预期工作,但是我想在通过
application.Shutdown()
关闭应用程序时禁用此检查

在关闭窗口之前,
应用程序
中没有触发任何事件,并且无法覆盖Shutdown方法


如何检测是什么导致了窗口关闭?

谁调用了
Application.Shutdown()
?如果你负责这件事,只需设置一个标志,表明你做了这件事,并在
关闭
事件处理程序中检查该标志。

免责声明:如果可以的话,我会将此作为评论而不是回答,因为这是一个肮脏的黑客行为(不是干净的)。但如果你真的需要一些东西,但没有更好的解决方案,我会张贴它无论如何希望能帮助

如果您肯定无法控制/钩住调用应用程序关闭的代码库部分,那么可能需要找到其他响应关闭的东西,您可以在窗口关闭之前触发关闭

我(不太理想)的想法是设置另一个隐藏窗口(),用户不会与之交互,但应用程序会在关闭时关闭

在该窗口的关闭事件中,您可以设置一个标志来指示应用程序正在关闭。然后在主窗口的关闭事件中,您可以对该标志作出反应

要解决的一个大问题是如何配置,使隐藏窗口始终在主窗口安全关闭之前关闭


我使用MainWindow.Xaml作为应用程序Startupuri进行了一些有限的测试,并从application.onstartup事件创建了隐藏窗口,发现隐藏窗口将首先关闭-但我不想在所有场景中看到这一点!实际上,要让它正常工作并进行充分测试可能需要很多工作——正如我所说,这是最后一次restort dirty hack。

调用
关机
是否在您的控制之下?如果是这种情况,您只需在某个地方设置标志,并在
关闭
处理程序中检查它。幸运的是,它不是。在这种情况下,您能否详细说明
关闭
是如何调用的以及由谁调用的?它可能会帮助我们找到解决方案;然后通过内部的状态机。当未处理的异常冒泡到顶部而未捕获时,也会调用它。可能重复的我不负责调用它。