첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

728x90
반응형

TestProject.zip
다운로드

▶ Program.cs

using System;
using System.Runtime.InteropServices;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Delegate
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 핸들러 루틴 대리자 - HandlerRoutineDelegate(controlType)

        /// <summary>
        /// 핸들러 루틴 대리자
        /// </summary>
        /// <param name="controlType">컨트롤 타입</param>
        /// <returns>처리 결과</returns>
        public delegate bool HandlerRoutineDelegate(ControlType controlType);

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Import
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 콘솔 컨트롤 핸들러 처리하기 - SetConsoleCtrlHandler(handler, add);

        /// <summary>
        /// 콘솔 컨트롤 핸들러 처리하기
        /// </summary>
        /// <param name="handler">핸들러</param>
        /// <param name="add">추가 여부</param>
        /// <returns>처리 결과</returns>
        [DllImport("Kernel32")]
        private static extern bool SetConsoleCtrlHandler(HandlerRoutineDelegate handler, bool add);

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            Console.Title = "콘솔(Console) 프로그램 CTRL+C 종료시 처리하기";

            AppDomain.CurrentDomain.ProcessExit += AppDomain_ProcessExit;

            SetConsoleCtrlHandler(new HandlerRoutineDelegate(HandlerRoutine), true);

            Console.ReadKey(false);
        }

        #endregion

        #region 앱 도메인 프로세스 종료시 처리하기 - AppDomain_ProcessExit(sender, e)

        /// <summary>
        /// 앱 도메인 프로세스 종료시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private static void AppDomain_ProcessExit(object sender, EventArgs e)
        {
            Console.WriteLine("APP DOMAIN PROCESS EXIT");
        }

        #endregion

        #region 핸들러 루틴 처리하기 - HandlerRoutine(controlType)

        /// <summary>
        /// 핸들러 루틴 처리하기
        /// </summary>
        /// <param name="controlType">컨트롤 타입</param>
        /// <returns>처리 결과</returns>
        private static bool HandlerRoutine(ControlType controlType)
        {
            switch(controlType)
            {
                case ControlType.CTRL_C_EVENT :
                
                    Console.WriteLine("CTRL+C RECEIVED");

                    break;

                case ControlType.CTRL_BREAK_EVENT :

                    Console.WriteLine("CTRL+BREAK RECEIVED");

                    break;

                case ControlType.CTRL_CLOSE_EVENT :

                    Console.WriteLine("PROGRAM BEING CLOSED");

                    break;

                case ControlType.CTRL_LOGOFF_EVENT   :
                case ControlType.CTRL_SHUTDOWN_EVENT :

                    Console.WriteLine("USER IS LOGGING OFF");

                    break;
            }

            return true;
        }

        #endregion
    }
}
728x90
반응형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요