2008-10-14 4 views
8

CancelKeyPress 이벤트가 실행되지 않는 한 콘솔 응용 프로그램을 열어 두는 가장 좋은 방법은 무엇입니까?CancelKeyPress 이벤트가 발생할 때까지 어떻게 콘솔을 열어 둘 수 있습니까?

입력을 받아들이지 않으려면 Console.Read 또는 Console.ReadLine을 사용하지 않는 것이 좋습니다. 난 그냥 기본 응용 프로그램을 해고 될 때 콘솔 이벤트 세부 정보를 인쇄 할 수 있도록 싶습니다. 그런 다음 CancelKeyPress 이벤트가 발생하면 응용 프로그램을 정상적으로 종료하려고합니다.

+0

"정상적으로 응용 프로그램을 종료하십시오"라고 여기는 것은 당신이 여기서 고심하고있는 부분입니다. 그렇지 않으면 응용 프로그램이 ctrl-c에서 자동으로 종료됩니다. 제목을 변경해야합니다. – TheSoftwareJedi

+1

아니요, 문제가있는 이유는 질문 상태로 "CancelKeyPress 이벤트가 실행되지 않은 한 콘솔 응용 프로그램을 열어 두는 가장 좋은 방법은"입니다. –

답변

10

. 그렇지 않으면 응용 프로그램이 ctrl-c에서 자동으로 종료됩니다. 제목을 변경해야합니다.

다음은 내가 필요하다고 생각하는 것에 대한 간단한 데모입니다. 알림을 위해 잠금 및 모니터를 사용하면 좀 더 세련 될 수 있습니다. 난 당신이 생각해야 할 정확하게 확실하지 않다, 그래서 난 그냥

class Program 
{ 

    private static 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..."); 
    } 

} 
+0

계속 유지하는 가장 좋은 방법은 무엇이 었는지 더 찾고있었습니다. 입력을 요구하지 않고 콘솔을 엽니 다. 정상적으로 종료하려면 CancelKeyPress 이벤트를 처리합니다. Thread.Sleep이 작업을 수행하는 가장 좋은 방법 인 것 같습니다. –

+1

잠자는 것보다 while 회 돌이가 더 많습니다. – ICR

1

이미 응용 프로그램을 종료하는 CancelKeyPress에 바인딩 된 처리기가 있습니다. 이벤트를 가로 채고 응용 프로그램이 닫히지 않도록하려면 응용 프로그램을 종료하는 유일한 이유가 있습니다.

상황에 따라 앱을 무한 루프에 넣고 내장 이벤트 처리기에서 강제 종료하도록하십시오. Wait (1)과 같은 것을 사용하거나 백그라운드 프로세스를 사용하여 아무것도하지 않을 때 CPU를 사용하지 못하게 할 수 있습니다.

3

_s_stop 부울 예제 코드 휘발성 선언해야합니다 ...이 포즈 것, 또는 지나치게 야심 찬 최적화 프로그램을 발생할 수 있습니다 무한 루프.

+0

.NET에서 이전에이 내용을 들어 보지 못했습니다. 뭔가 휘발성이라고 표시하는 링크가 있습니까? –

1

F5 (디버깅) 대신 CTRL + F5의 키보드 키에서 디버깅하지 않고 프로그램이나 코드를 실행하기 만하면됩니다.

관련 문제