当程序被迫退出时,我正在尝试保存一些数据。
例如,如果 PC 关闭或被任务管理器关闭。
它不是控制台或 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
事件。但请注意,根据进程的终止方式,即使是这样也可能不会引发。
如果您需要比这更具体的帮助,请提供一个很好的 Minimal, Complete, and Verifiable code example显示您尝试过的内容,重现您遇到的任何问题,并以精确和具体的方式解释代码现在具有的确切行为以及您想要的行为。
补充阅读:
How to run code before program exit?
C# Windows Program Exit Request (Detect Application.Exit) No Forms
How to detect when application terminates?
这些相关帖子似乎都没有真正充分涵盖“强制终止”场景,因此在技术上不是您问题的精确副本,但它们确实提供了关于检测您自己的进程退出的技术的各种很好的讨论。
关于c# - 未引发 ApplicationExit 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143822/