C #에서 콘솔 응용 프로그램을 종료하는 명령은 무엇입니까?


답변:


333

당신이 사용할 수있는 Environment.Exit(0);Application.Exit

Environment.Exit(0) 더 깨끗 합니다.


8
궁금한 점이 무엇입니까?
Grant H.

이것은 stackoverflow.com/a/7865126/1530166 통해 콘솔 앱에 타이머를 추가했을 때 완벽하게 작동했습니다 . stackoverflow.com/a/37029044/1530166을 사용할 때도 Application.Exit 이하 지 못했습니다 .
Jason Anderson

5
@GrantH. 기본 운영 체제에 더 유용한 오류 코드를 제공하는 이유는 무엇입니까?
Fayssal El Mofatiche

그러나 Environment.ExitSecurityPermissionFlag.UnmanagedCode 권한이 있어야합니다. 일부 사용자에게는 문제가 될 수 있습니다.
wp78de

93

가장 적절한 방법으로 몇 가지 옵션 :

  1. Program.Main 메서드에서 int를 반환
  2. 예외를 던지고 어디에서나 처리하지 마십시오 (예기치 않은 오류 상황에 사용)
  3. 다른 곳에서 강제 종료하려면 System.Environment.Exit( 휴대용이 아닙니다! 아래 참조 )

가독성을 높이기 위해 2013 년 9 월 수정

특정 종료 코드를 사용하여 리턴 : 주석에서 Servy가 지적한대로 int리턴 유형으로 Main을 선언 하고 이러한 방식으로 오류 코드를 리턴 할 수 있습니다. 그래서 거기에 정말 사용 Environment.Exit 할 필요는 없다 않는 한 당신이 종료 코드로 종료해야 할 가능성이 메인 방법에 그것을 할 수 없습니다. 처리되지 않은 예외가 전파되면 예외를 throw하고 Main에서 오류 코드를 반환하여이를 피할 수 있습니다. 응용 프로그램이 다중 스레드 인 경우 종료 코드로 올바르게 종료하려면 더 많은 상용구가 필요할 수 있으므로 Environment.Exit를 호출하는 것이 좋습니다.

Evironment.Exit멀티 스레드 응용 프로그램을 작성할 때도 사용에 대한 또 다른 요점 은 재사용 성 입니다. Environment.Exit관련 이 없는 환경 (예 : 웹 서버에서 사용할 수있는 라이브러리) 에서 코드를 재사용 하려면 코드를 이식 할 수 없습니다. 내 생각에 가장 좋은 해결책은 여전히 ​​메서드가 일부 오류 / 완료 상태에 도달했음을 나타내는 예외 및 / 또는 반환 값을 사용하는 것입니다. 이렇게하면 모든 .NET 환경과 모든 유형의 응용 프로그램에서 항상 동일한 코드를 사용할 수 있습니다. 종료 코드를 반환하거나 비슷한 방식으로 종료해야하는 앱을 구체적으로 작성하는 경우 Environment.Exit계속 진행하여 스레드를 최상위 수준으로 감싼 다음 필요에 따라 오류 / 예외를 처리 할 수 ​​있습니다.


10
마지막 옵션은 맛이 좋지 않습니다. 프로그래머는 예외를 던져서 프로그램을 종료하고 싶지 않습니다.
Nikhil Agrawal

5
내가 "가장 적절한 순서대로"썼습니다. 또한 예외를 발생시키는 특정 상황에서는 올바른 방법이 있습니다 (예 : 예기치 않은 치명적인 오류가 발생하여 응용 프로그램이 복구되지 않는 경우). 명확히하기 위해 답변을 업데이트했습니다.
sinelaw

Main에있는 경우 0, 1 등을 반환하고 메소드 서명을 오류 코드를 반환하기 위해 int를 반환하는 것으로 표시하면 Environment.Exit를 사용하여 오류 코드를 지정할 필요가 없습니다.
Servy

2
호출 스택의 깊이와 주 스레드에 있는지 여부에 따라 다릅니다. 환경을 호출하는 것이 더 간단 할 수 있습니다. 클래스 스레드에서 작동하지 않는 예외를 사용하지 않고 호출 스택을 풀기 위해 예외를 사용하지 않고 전체 프로그램을 기본 기능으로 되돌 리도록 전체 프로그램을 설계하는 것보다 빠릅니다. 예외 또는 처리되지 않은 상태로 처리 할 수 ​​있습니다. 기본 메소드 나 스레드의 catch 로직이이를 전혀 볼 수없는 방식
KeithS

옵션 순서를 변경했습니다. 예외를 던지면 코드를 다른 실행 환경에서 라이브러리로 재사용하기가 훨씬 쉽다는 장점이 있습니다.
sinelaw

26

기본 기능 실행이 완료되면 콘솔 응용 프로그램이 종료됩니다. "반환"은 이것을 달성 할 것입니다.

    static void Main(string[] args)
    {
        while (true)
        {
            Console.WriteLine("I'm running!");
            return; //This will exit the console application's running thread
        }
    }

오류 코드를 반환하는 경우 초기 스레드 외부의 함수에서 액세스 할 수있는 다음과 같은 방법으로 오류 코드를 반환 할 수 있습니다.

    System.Environment.Exit(-1);

9

Environment.Exit(0)및 을 사용할 수 있습니다 Application.Exit.

Environment.Exit():이 프로세스를 종료하고 기본 운영 체제에 지정된 종료 코드를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.