我寫了這個小程序來演示該問題的要點:如何使一個控制檯應用程序退出正常關閉時
using System;
using System.IO;
using System.Threading;
class Program
{
static void Main(string[] args)
{
using (var disp = new MyDisp())
{
using (var ewhLocalExit = new EventWaitHandle(false, EventResetMode.ManualReset))
{
Console.WriteLine("Enter Ctrl+C to terminate the app.");
Console.CancelKeyPress += (_, e) =>
{
e.Cancel = true;
ewhLocalExit.Set();
};
ewhLocalExit.WaitOne();
}
}
File.AppendAllText("Log.txt", "Terminated.\n");
}
}
class MyDisp : IDisposable
{
public MyDisp()
{
File.AppendAllText("Log.txt", "Started.\n");
}
public void Dispose()
{
File.AppendAllText("Log.txt", "Disposed.\n");
}
}
當我運行它,然後按Ctrl + C,我看「開始。 Disposed.Terminated「。在Log.txt中
當我運行它並用鼠標關閉它時,我只看到「開始」。
如何優雅地退出,以便至少可以看到「已處理」。 ?