.net 在Application.Run()返回时获取CloseReason?

.net 在Application.Run()返回时获取CloseReason?,.net,winforms,.net,Winforms,当表单关闭时,它会在其FormClosed事件CloseReason中获得一个有用的参数。然而,我们的应用程序运行时只有一个托盘图标,大部分时间没有打开任何窗口。当它退出时,我想记录它退出的原因,特别是知道CloseReason.windowshutdown和CloseReason.TaskManagerClosing会很有用 在应用程序之后是否有任何方法检查上述内容。在没有任何表单实例的情况下运行返回?没有内置方法,但您可以自己执行 最简单的方法可能是在程序类中添加一个静态属性,在其中指定在F

当表单关闭时,它会在其
FormClosed
事件
CloseReason
中获得一个有用的参数。然而,我们的应用程序运行时只有一个托盘图标,大部分时间没有打开任何窗口。当它退出时,我想记录它退出的原因,特别是知道
CloseReason.windowshutdown
CloseReason.TaskManagerClosing
会很有用


应用程序之后是否有任何方法检查上述内容。在没有任何
表单
实例的情况下运行
返回?

没有内置方法,但您可以自己执行

最简单的方法可能是在程序类中添加一个静态属性,在其中指定在FormClosed事件中获得的CloseReason。这可以在以后的代码中读取


或者,您也可以创建自己的类,该类从那里派生并处理FormClosed事件。这可能是一种更干净的方法,但设置起来也会更麻烦。

嗯。。。你说的“…”是什么意思。。。没有任何表单实例'?您的意思是希望在关闭最后一个窗体后获取此值吗?或者您是否有一个WinForms应用程序,它运行时根本没有任何表单?大多数情况下,它运行时根本没有任何表单。用户可以打开表单,但一旦使用完毕,表单就会被销毁。听起来像是一个有趣的应用程序。:-)为什么您使用windows表单而不是将其作为服务运行?首先,“而不是”是什么意思?如果它是服务,那么当需要显示某些UI时,它仍然需要使用WinForms。其次,这有什么不寻常之处?Skype大多数时候都没有可见的窗口,但它只是一个用户应用程序,因此不能作为服务运行。这根本没有好处。前一种想法行不通,因为没有要关闭的表单。看看ApplicationContext是否可以做到这一点,谢谢您的链接。ApplicationContext也不能做到这一点。通常我会-1,但这似乎不合理,因为学习ApplicationContext仍然很方便。。。