“退出”控制台应用程序

我正在寻找一种方法来触发一个代码段,当一个控制台应用程序手动closures(用户closures窗口)。 一直试着:

AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 

但如果手动closures,以上方法不起作用。

有没有什么办法使用.Net调用这个,或者我需要导入内核的DLL,这样做?

您需要挂钩到控制台退出事件,而不是您的过程。

http://geekswithblogs.net/mrnat/archive/2004/09/23/11594.aspx

捕获控制台出口C#

此代码用于捕获closures控制台窗口的用户:

 using System; using System.Runtime.InteropServices; class Program { static void Main(string[] args) { handler = new ConsoleEventDelegate(ConsoleEventCallback); SetConsoleCtrlHandler(handler, true); Console.ReadLine(); } static bool ConsoleEventCallback(int eventType) { if (eventType == 2) { Console.WriteLine("Console window closing, death imminent"); } return false; } static ConsoleEventDelegate handler; // Keeps it from getting garbage collected // Pinvoke private delegate bool ConsoleEventDelegate(int eventType); [DllImport("kernel32.dll", SetLastError = true)] private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add); } 

谨防这些限制。 您必须快速响应此通知,您需要5秒钟才能完成任务。 花费更长的时间,Windows将毫不客气地杀死你的代码。 而且你的方法在工作线程上被asynchronous调用,程序的状态是完全不可预知的,所以locking可能是必需的。 确保中止不会造成麻烦。 例如,将状态保存到文件中时,请确保先保存到临时文件并使用File.Replace()。