> 백엔드 개발 > C++ > C# 콘솔 애플리케이션에서 Ctrl C(SIGINT)를 어떻게 원활하게 처리할 수 있습니까?

C# 콘솔 애플리케이션에서 Ctrl C(SIGINT)를 어떻게 원활하게 처리할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-27 05:35:09
원래의
369명이 탐색했습니다.

How Can I Gracefully Handle Ctrl C (SIGINT) in a C# Console Application?

C# 콘솔 애플리케이션에서 Ctrl C(SIGINT) 캡처

C# 콘솔 애플리케이션으로 작업할 때 Ctrl C(SIGINT) 키 입력을 트랩해야 할 수도 있습니다. 애플리케이션이 종료되기 전에 특정 정리 작업을 수행합니다. 이 문서에서는 C# 콘솔 애플리케이션에서 SIGINT를 캡처하는 모범 사례를 자세히 설명합니다.

Console.CancelKeyPress 이벤트 활용

권장되는 접근 방식은 Console.CancelKeyPress 이벤트를 구독하는 것입니다. 사용자가 Ctrl C를 누릅니다. 이 이벤트에 대리자를 제공하면 애플리케이션이 실행되기 전에 정리 코드를 실행할 수 있습니다.

public static void Main(string[] args)
{
    Console.CancelKeyPress += delegate {
        // Cleanup code
    };

    while (true) {}
}
로그인 후 복사

그러나 이 접근 방식에는 한계가 있습니다. 정리 대리자 뒤에 배치된 코드는 Ctrl C를 누르면 실행되지 않을 수 있습니다.

대체 접근 방식: Set-Reset 이벤트 사용

즉각적인 중단이 바람직하지 않은 시나리오에서는 정상적으로 종료할 수 있습니다. 계산이나 작업이 완료되면 응용 프로그램입니다. set-reset 이벤트를 사용하면 종료 프로세스를 제어할 수 있습니다.

private static bool keepRunning = true;

public static void Main(string[] args)
{
    Console.CancelKeyPress += (sender, e) => {
        e.Cancel = true;
        keepRunning = false;
    };

    while (keepRunning) {
        // Task execution
    }

    Console.WriteLine("Exited gracefully");
}
로그인 후 복사

Ctrl C를 누르면 e.Cancel이 true로 설정되어 즉시 종료되지 않습니다. keepRunning 변수가 false로 설정되어 현재 작업이 완료된 후 while 루프가 종료됩니다. 이렇게 하면 애플리케이션이 정상적으로 종료될 수 있습니다.

위 내용은 C# 콘솔 애플리케이션에서 Ctrl C(SIGINT)를 어떻게 원활하게 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿