Program Tip

콘솔 응용 프로그램의 경우 "종료시"

programtip 2020. 11. 17. 20:57
반응형

콘솔 응용 프로그램의 경우 "종료시"


이 질문에 이미 답변이 있습니다.

콘솔 응용 프로그램을 수동으로 닫을 때 (사용자가 창을 닫을 때) 코드를 트리거하는 방법을 찾고 있습니다. 다음과 같이 시도했습니다.

AppDomain.CurrentDomain.ProcessExit +=
    new EventHandler(CurrentDomain_ProcessExit);

그러나 위의 내용은 수동으로 닫으면 작동하지 않습니다.

이를 위해 .Net 호출을 사용하는 방법이 있습니까? 아니면 커널 dll을 가져와야합니까?


프로세스가 아닌 콘솔 종료 이벤트에 연결해야합니다.

http://geekswithblogs.net/mrnat/archive/2004/09/23/11594.aspx

콘솔 종료 C # 캡처


이 코드는 사용자가 콘솔 창을 닫는 것을 포착합니다.

using System;
using System.Runtime.InteropServices;

class Program {
    static void Main(string[] args) {
        handler = new ConsoleEventDelegate(ConsoleEventCallback);
        SetConsoleCtrlHandler(handler, true);
        Console.ReadLine();
    }

    static bool ConsoleEventCallback(int eventType) {
        if (eventType == 2) {
            Console.WriteLine("Console window closing, death imminent");
        }
        return false;
    }
    static ConsoleEventDelegate handler;   // Keeps it from getting garbage collected
    // Pinvoke
    private delegate bool ConsoleEventDelegate(int eventType);
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add);

}

제한에주의하십시오. 당신 이 통지에 신속하게 대응하기 위해, 당신은 작업을 완료하는 데 5 초 있어요. 더 오래 걸리면 Windows가 코드를 무례하게 죽일 것입니다. 그리고 당신의 메서드는 작업자 스레드에서 비동기 적으로 호출되며 프로그램의 상태는 완전히 예측할 수 없으므로 잠금이 필요할 수 있습니다. 중단으로 인해 문제가 발생하지 않는지 확인하십시오. 예를 들어 상태를 파일에 저장할 때 먼저 임시 파일에 저장하고 File.Replace ()를 사용하십시오.

참고 URL : https://stackoverflow.com/questions/4646827/on-exit-for-a-console-application

반응형