Qual é o comando para sair de um aplicativo de console em C #?

256

Qual é o comando em C # para sair de um aplicativo de console?

Sababoni
fonte

Respostas:

333

Você pode usar Environment.Exit(0);eApplication.Exit

Environment.Exit(0) é mais limpo .

Nikhil Agrawal
fonte
8
Apenas curioso, o que o torna mais limpo?
Grant H.
Isso funcionou perfeitamente para mim quando adicionei um timer a um aplicativo de console via stackoverflow.com/a/7865126/1530166 . Application.Exit não fez isso, mesmo ao usar stackoverflow.com/a/37029044/1530166 .
Jason Anderson
5
@GrantH. é mais limpo porque fornece ao sistema operacional subjacente um código de erro mais útil por que ele está saindo.
Fayssal El Mofatiche
No entanto, Environment.Exitrequer que você tenha permissões SecurityPermissionFlag.UnmanagedCode - o que pode ser problemático para alguns.
Wp78de 11/0918
93

Várias opções, por ordem da maneira mais apropriada:

  1. Retornar um int do método Program.Main
  2. Lance uma exceção e não lide com isso em nenhum lugar (use para situações de erro inesperadas)
  3. Para forçar a rescisão em outro lugar System.Environment.Exit( não é portátil! Veja abaixo )

Editado em 9/2013 para melhorar a legibilidade

Retornando com um código de saída específico: Como Servy aponta nos comentários, você pode declarar Main com um inttipo de retorno e retornar um código de erro dessa maneira. Portanto, realmente não há necessidade de usar Environment.Exit, a menos que você precise finalizar com um código de saída e não possa fazê-lo no método Main. Provavelmente, você pode evitar isso lançando uma exceção e retornando um código de erro no Principal se houver alguma exceção não tratada propagada para lá. Se o aplicativo for multiencadeado, você provavelmente precisará de mais clichês para finalizar corretamente com um código de saída, para que seja melhor chamar apenas Environment.Exit.

Outro ponto contra o uso Evironment.Exit- mesmo ao escrever aplicativos multithread - é a reutilização . Se você quiser reutilizar seu código em um ambiente que seja Environment.Exitirrelevante (como uma biblioteca que pode ser usada em um servidor da Web), o código não será portátil. A melhor solução ainda é, na minha opinião, sempre usar exceções e / ou valores de retorno que representam que o método atingiu algum estado de erro / conclusão. Dessa forma, você sempre pode usar o mesmo código em qualquer ambiente .NET e em qualquer tipo de aplicativo. Se você estiver escrevendo especificamente um aplicativo que precise retornar um código de saída ou terminar de maneira semelhante ao que Environment.Exité possível, poderá seguir em frente e agrupar o encadeamento no nível mais alto e lidar com os erros / exceções, conforme necessário.

sinelaw
fonte
10
Essa última opção está de mau gosto. Nenhum programador deseja sair de um programa lançando uma exceção.
Nikhil Agrawal
5
Como escrevi "por ordem dos mais apropriados". Além disso, em certas situações, lançar uma exceção É a maneira correta (como quando ocorre um erro fatal inesperado que não deve ocorrer, do qual o aplicativo nunca se recuperará). Atualizei a resposta para esclarecer.
sinelaw
Se você estiver em Main, basta retornar 0, 1 etc. e marcar a assinatura do método como retornando um int para retornar um código de erro, você NÃO PRECISA usar o Environment.Exit para especificar um código de erro.
Servy
2
Depende de quão profundo você está na pilha de chamadas e se está no segmento principal. Pode ser mais simples chamar Environment.Exit do que arquitetar todo o programa para retornar de volta à função principal sem usar uma exceção para desanuviar a pilha de chamadas (que não funcionaria a partir de um encadeamento em segundo plano; o ThreadPool engoliria a exceção ou iria jogá-lo fora não tratada, de qualquer forma qualquer lógica captura no método principal ou fio de nunca vê-lo.
Keiths
Eu mudei a ordem das opções. Lançar uma exceção tem a vantagem de tornar seu código muito mais fácil de reutilizar como uma biblioteca em diferentes ambientes executáveis.
sinelaw
26

Os aplicativos do console serão encerrados quando a função principal terminar a execução. Um "retorno" conseguirá isso.

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

Se você estiver retornando um código de erro, poderá fazê-lo desta maneira, acessível a partir de funções fora do encadeamento inicial:

    System.Environment.Exit(-1);
Desenvolvedor
fonte
9

Você pode usar Environment.Exit(0)e Application.Exit.

Environment.Exit(): finaliza esse processo e fornece ao sistema operacional subjacente o código de saída especificado.

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
fonte