您可以使用以下ProcessExit
事件AppDomain
:
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
}
static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
Console.WriteLine("exit");
}
}
更新资料
这是一个完整的示例程序,其中的空“消息泵”运行在单独的线程上,允许用户在控制台中输入quit命令以正常关闭应用程序。在MessagePump中循环之后,您可能希望以一种很好的方式清理线程使用的资源。这样做比在ProcessExit中做的更好,原因有几个:
- 避免跨线程问题;如果在MessagePump线程上创建了外部COM对象,则在那里更容易处理它们。
- ProcessExit有时间限制(默认为3秒),因此,如果清理工作很耗时,则在该事件处理程序中进行操作可能会失败。
这是代码:
class Program
{
private static bool _quitRequested = false;
private static object _syncLock = new object();
private static AutoResetEvent _waitHandle = new AutoResetEvent(false);
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
Thread msgThread = new Thread(MessagePump);
msgThread.Start();
string command = string.Empty;
do
{
command = Console.ReadLine();
} while (!command.Equals("quit", StringComparison.InvariantCultureIgnoreCase));
SetQuitRequested();
_waitHandle.WaitOne();
}
private static void SetQuitRequested()
{
lock (_syncLock)
{
_quitRequested = true;
}
}
private static void MessagePump()
{
do
{
} while (!_quitRequested);
_waitHandle.Set();
}
static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
Console.WriteLine("exit");
}
}