console控制檯應用,關閉事件接收、處理

接收關閉消息,並以log形式輸出至文件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleTest
{
    class Program
    {
        /// <summary>
        /// console控制檯,關閉消息接收示例;
        /// 點擊console窗體上的關閉按鈕,或 Ctrl + C
        /// </summary>
        static void Main(string[] args)
        {
            bool result = ConsoleMsg.SetHandler(HandleF, true);
            //Console.WriteLine("設置系統消息接收函數結果 -> " + result);
            Console.ReadLine();
        }


        /// <summary>
        /// 用於處理系統消息的函數
        /// </summary>
        /// <param name="msg">系統消息</param>
        /// <returns>對系統消息的處理結果</returns>
        private static bool HandleF(int msg)
        {
            String str = "接收到console控制檯消息-> " + msg;
            WriteLog(str);

            return false;
        }

        private static Object writeLock = new object();

        /// <summary>
        /// 輸出運行log信息
        /// </summary>
        /// <param name="text"></param>
        private static void WriteLog(string text)
        {
            lock (writeLock)
            {
                System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "log.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + text + "\r\n");
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace ConsoleTest
{
    /// <summary>
    /// console控制檯消息接收。
    /// 添加消息處理:SetHandler(F,true)
    /// 移除消息處理:SetHandler(F,false)
    /// </summary>
    public class ConsoleMsg
    {
        [DllImport("kernel32.dll")]
        private static extern bool SetConsoleCtrlHandler(Handler handFunc, bool Add);

        /// <summary>
        /// 委託方法申明,用於處理系統消息處。
        /// </summary>
        /// <param name="sysMSG">接收到的系統消息</param>
        /// <returns>對系統消息的處理結果</returns>
        public delegate bool Handler(int sysMSG);

        /// <summary>
        /// 設置console控制檯消息接收處理函數。
        /// 當發生系統事件時,會調用handFunc函數。
        /// </summary>
        /// <param name="handFunc">用於處理系統消息的函數</param>
        /// <param name="add">添加 或 刪除,消息處理函數</param>
        /// <returns>設置是否成功</returns>
        public static bool SetHandler(Handler handFunc, bool add)
        {
            bool result = SetConsoleCtrlHandler(handFunc, add);
            Console.Read();
            return result;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章