我试图保存一些数据,当程序被迫退出。
例如,如果PC关机或被任务pipe理器closures。
这不是一个控制台或Winforms应用程序。 这只是一个没有用户界面的后台进程。
namespace Test { class Test { static void Main() { Application.ApplicationExit += new EventHandler(OnProcessExit); //some stuff to do here } static void OnProcessExit(object sender, EventArgs e) { //saving all the important data Console.WriteLine("Im out of here!"); Environment.Exit(0); } } }
这是我的尝试。 我没有任何错误,但我的处理程序没有被调用。
这里至少有两个问题。
Application.ApplicationExit
事件只有在调用了Application.Run()
并且Run()
方法即将返回时才会引发(例如,您调用了Application.Exit()
或Application.ExitThread()
,或者关闭了最后一个/主窗口等)。 在你从未调用过Application.Run()
的非GUI程序中, Application
对象没有机会引发事件。
强制终止一个进程可以防止执行更多的代码,包括事件处理程序。 对于非GUI进程,更适合处理的事件是AppDomain.ProcessExit
。 但是,即使这个事件可能不会被提出,如果你强制终止你的过程。
所以,请尝试AppDomain.ProcessExit
事件。 但请注意,取决于过程如何终止,即使这可能不会提出。
如果您需要更多具体的帮助,请提供一个很好的最小,完整和可验证的代码示例 ,显示您尝试过的内容,重现您遇到的任何问题,然后详细解释代码具体行为和你想要什么。
补充阅读:
如何在程序退出之前运行代码?
C#Windows程序退出请求(检测Application.Exit)没有窗体
如何检测应用程序何时终止?
这些相关的帖子似乎都没有充分涵盖“有力的终止”场景,所以在技术上并不完全重复你的问题,但是他们确实提供了很多关于检测你自己的进程退出的技巧的很好的讨论。