728x90
반응형
728x170
▶ 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
////////////////////////////////////////////////////////////////////// Event
#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
////////////////////////////////////////////////////////////////////// Function
#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
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
AppDomain.CurrentDomain.ProcessExit += AppDomain_ProcessExit;
SetConsoleCtrlHandler(new HandlerRoutineDelegate(HandlerRoutine), true);
Console.ReadKey(false);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] WM_DEVICECHANGE 메시지를 사용해 USB 연결/해제 알림 구하기 (0) | 2019.08.03 |
---|---|
[C#/COMMON] WindowsIdentity 클래스 : 윈도우즈 로그인 계정 구하기 (0) | 2019.08.02 |
[C#/COMMON] 인증서 설치하기 (0) | 2019.08.02 |
[C#/COMMON] IMessageFilter 인터페이스 : WM_INPUT 메시지 처리하기 (0) | 2019.08.02 |
[C#/COMMON] 지정한 타입의 항목을 갖는 제네릭 리스트 구하기 (0) | 2019.08.01 |
[C#/COMMON] 커스텀 태스크 사용하기 (0) | 2019.08.01 |
[C#/COMMON] 커스텀 태스크 사용하기 (0) | 2019.08.01 |
[C#/COMMON] IAsyncStateMachine 인터페이스 : 비동기 처리하기 (0) | 2019.07.31 |
[C#/COMMON] IAsyncStateMachine 인터페이스 : 비동기 처리하기 (0) | 2019.07.31 |
[C#/COMMON] Environment 클래스 : Is64BitProcess 정적 속성을 사용해 64비트 프로세스 여부 구하기 (0) | 2019.07.31 |
댓글을 달아 주세요