반응형
콘솔 응용 프로그램의 경우 "종료시"
콘솔 응용 프로그램을 수동으로 닫을 때 (사용자가 창을 닫을 때) 코드를 트리거하는 방법을 찾고 있습니다. 다음과 같이 시도했습니다.
AppDomain.CurrentDomain.ProcessExit +=
new EventHandler(CurrentDomain_ProcessExit);
그러나 위의 내용은 수동으로 닫으면 작동하지 않습니다.
이를 위해 .Net 호출을 사용하는 방법이 있습니까? 아니면 커널 dll을 가져와야합니까?
프로세스가 아닌 콘솔 종료 이벤트에 연결해야합니다.
http://geekswithblogs.net/mrnat/archive/2004/09/23/11594.aspx
이 코드는 사용자가 콘솔 창을 닫는 것을 포착합니다.
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
반응형
'Program Tip' 카테고리의 다른 글
Git 커밋 트리밍 / Git 기록 스 쿼싱 (0) | 2020.11.17 |
---|---|
최소 비교 횟수로 배열에서 두 번째로 큰 요소 찾기 (0) | 2020.11.17 |
기존 DataTable에 값이있는 새 열을 추가하는 방법은 무엇입니까? (0) | 2020.11.17 |
EditText 상자 높이를 확장하는 방법 (0) | 2020.11.16 |
gsub로 여러 글자를 악센트로 대체 (0) | 2020.11.16 |