CancelKeyPress 이벤트가 발사 될 때까지 콘솔을 열어 두려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/203246

  •  03-07-2019
  •  | 
  •  

문제

CancelKeyPress 이벤트가 해고되지 않은 한 콘솔 애플리케이션을 열어 두는 가장 좋은 방법은 무엇입니까?

입력을 수락하고 싶지 않으므로 Console.Read 또는 Console.Readline을 사용하지 않는 것이 좋습니다. 기본 응용 프로그램이 해고 될 때 콘솔 이벤트 세부 사항에 인쇄 할 수 있도록하고 싶습니다. 그런 다음 CancelKeypress 이벤트가 시작되면 신청서를 우아하게 종료하고 싶습니다.

도움이 되었습니까?

해결책

나는 "신청서를 우아하게 종료"하는 것이 당신이 여기서 어려움을 겪고 있다고 가정합니다. 그렇지 않으면 응용 프로그램이 자동으로 CTRL-C에서 종료됩니다. 제목을 변경해야합니다.

다음은 내가 필요하다고 생각하는 것의 빠른 데모입니다. 잠금 및 알림을 사용하여 조금 더 세련 될 수 있습니다. 나는 당신이 필요한 것을 정확히 잘 모르겠습니다. 그래서 나는 이것을 포즈 할 것입니다 ...

class Program
{

    private static volatile bool _s_stop = false;

    public static void Main(string[] args)
    {
        Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
        while (!_s_stop)
        {
            /* put real logic here */
            Console.WriteLine("still running at {0}", DateTime.Now);
            Thread.Sleep(3000);
        }
        Console.WriteLine("Graceful shut down code here...");

        //don't leave this...  demonstration purposes only...
        Console.ReadLine();
    }

    static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
    {
        //you have 2 options here, leave e.Cancel set to false and just handle any
        //graceful shutdown that you can while in here, or set a flag to notify the other
        //thread at the next check that it's to shut down.  I'll do the 2nd option
        e.Cancel = true;
        _s_stop = true;
        Console.WriteLine("CancelKeyPress fired...");
    }

}

_S_STOP BOOLEAN은 휘발성으로 선언되어야합니다. 그렇지 않으면 지나치게 야심 한 최적화가 프로그램이 무한히 루프를 초래할 수 있습니다.

다른 팁

그만큼 _s_stop Boolean은 예제 코드에서 휘발성으로 선언되어야합니다. 그렇지 않으면 지나치게 야심 한 최적화가 프로그램이 무한히 루프를 유발할 수 있습니다.

응용 프로그램을 종료하는 CancelKeyPress에 대한 핸들러가 이미 있습니다. 이벤트에 연결해야 할 유일한 이유는 이벤트를 가로 채서 앱이 닫히지 않도록하는 경우입니다.

귀하의 상황에서, 앱을 무한 루프에 넣고 내장 핸들러가 그것을 죽이게하십시오. 대기 (1) 또는 백그라운드 프로세스와 같은 것을 사용하여 아무것도하지 않고 CPU를 사용하지 못하게 할 수 있습니다.

이것이 당신이 찾고있는 것일 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.console.cancelkeypress.aspx

키보드 키에서 디버깅없이 프로그램이나 코드를 실행하기 만하면 Ctrl + F5 F5 대신 (디버깅).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top