原始的console是沒有這種好東西的.於是我們想要在關閉視窗之後再來抓到這個關閉事件
就要自行加工處理了,直接上程式碼,在program.cs上
internal class Program
{
#region 激活關閉視窗事件
public delegate bool ControlCtrlDelegate(int CtrlType);
[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(ControlCtrlDelegate HandlerAppClose, bool Add);
private static ControlCtrlDelegate cancelHandler = new ControlCtrlDelegate(HandlerAppClose);
/// <summary>
/// 關閉視窗時的事件
/// </summary>
/// <param name="CtrlType"></param>
/// <returns></returns>
private static bool HandlerAppClose(int CtrlType)
{
logger.Debug("HandlerAppClose:控制台關閉中...:" + DateTime.Now.ToString());
return false;
}
#endregion
public static log4net.ILog logger = log4net.LogManager.GetLogger("ConSoleLog");//取得一個日誌記錄
static void Main(string[] args)
{
logger.Debug("SetConsoleCtrlHandler:" + DateTime.Now.ToString());
////註冊視窗關閉事件
bool bRet = SetConsoleCtrlHandler(cancelHandler, true);
while (true)
{
Console.WriteLine("主程式執行!");
Console.ReadLine();
Thread.Sleep(1000);
};
}
}
實際運行時.如果拿掉Console.ReadLine() 及 Thread.Sleep(1000) 這兩行很多時候會無法跑到
關閉的事件裡
沒有留言:
張貼留言