Estou estudando c # seguindo os guias no MSDN .
Agora, eu apenas tentei o Exemplo 1 ( aqui está o link para o MSDN ) e encontrei um problema: por que a janela do console se fecha imediatamente uma vez exibida minha saída?
using System;
public class Hello1
{
public static int Main()
{
Console.WriteLine("Hello, World!");
return 0;
}
}
c#
.net
console-application
msdn
user962206
fonte
fonte
Respostas:
Porque está terminado. Quando os aplicativos de console concluem a execução e retornam de seu
main
método, a janela do console associada é fechada automaticamente. Esse é o comportamento esperado.Se você quiser mantê-lo aberto para fins de depuração, precisará instruir o computador a aguardar um pressionamento de tecla antes de finalizar o aplicativo e fechar a janela.
O
Console.ReadLine
método é uma maneira de fazer isso. Adicionar esta linha ao final do seu código (imediatamente antes dareturn
instrução) fará com que o aplicativo aguarde que você pressione uma tecla antes de sair.Como alternativa, você pode iniciar o aplicativo sem o depurador conectado pressionando Ctrl+ F5no ambiente do Visual Studio, mas isso tem a desvantagem óbvia de impedir o uso dos recursos de depuração, que você provavelmente deseja ao escrever um aplicativo.
O melhor compromisso é provavelmente chamar o
Console.ReadLine
método apenas ao depurar o aplicativo, envolvendo-o em uma diretiva de pré-processador. Algo como:Você também pode querer que a janela permaneça aberta se uma exceção não capturada for lançada. Para fazer isso você pode colocar o
Console.ReadLine();
em umfinally
bloco:fonte
if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine();
.Ao invés de usar
você pode executar seu programa usando Ctrl+ F5(se estiver no Visual Studio). O Visual Studio manterá a janela do console aberta até você pressionar uma tecla.
Nota: Você não pode depurar seu código nesta abordagem.
fonte
Ctrl + F5
faz diferente que simplesmenteStart
faz diferente?Eu suponho que o motivo pelo qual você não deseja que ele seja fechado no modo de Depuração, é porque você deseja examinar os valores das variáveis etc. Portanto, provavelmente é melhor apenas inserir um ponto de interrupção no fechamento "}" da função principal . Se você não precisar depurar, Ctrl-F5 é a melhor opção.
fonte
Isso se comporta da mesma forma para CtrlF5ou F5. Coloque imediatamente antes do final do
Main
método.fonte
Console.ReadKey()
para qualquer tecla,Console.ReadLine()
espera por introduzir a ser pressionadoO programa é fechado imediatamente porque não há nada que o impeça de fechar. Insira um ponto de interrupção em
return 0;
ou adicioneConsole.Read();
antesreturn 0;
para impedir que o programa seja fechado.fonte
Estou um pouco atrasado para a festa, mas: nos projetos do Visual Studio 2019 para .NET Core, o console não fecha automaticamente por padrão. Você pode configurar o comportamento através do menu Ferramentas → Opções → Depuração → Geral → Fechar automaticamente o console quando a depuração parar. Se a janela do console fechar automaticamente, verifique se a configuração mencionada não está definida.
O mesmo se aplica aos novos projetos de console de estilo do .NET Framework:
O projeto antigo do .NET Framework ainda fecha incondicionalmente o console no final (a partir do Visual Studio 16.0.1).
Referência: https://devblogs.microsoft.com/dotnet/net-core-tooling-update-for-visual-studio-2019-preview-2/
fonte
Se você deseja manter seu aplicativo aberto, é necessário fazer algo para manter seu processo ativo. O exemplo abaixo é o mais simples, a ser colocado no final do seu programa:
No entanto, isso fará com que a CPU sobrecarregue, pois é forçada a iterar infinitamente.
Neste ponto, você pode optar por usar a
System.Windows.Forms.Application
classe (mas requer que você adicioneSystem.Windows.Forms
referência):Isso não vaza a CPU e funciona com sucesso.
Para evitar adicionar
System.Windows.Forms
referências, você pode usar um truque simples, o chamado giro em espera , importandoSystem.Threading
:Isso também funciona perfeitamente e basicamente consiste em um
while
loop com uma condição negada retornada pelo método lambda acima. Por que essa CPU não sobrecarrega? Você pode olhar o código fonte aqui ; de qualquer maneira, basicamente espera algum ciclo da CPU antes de repetir.Você também pode criar um looper de mensagem, que exibe as mensagens pendentes do sistema e processa cada uma delas antes de passar para a próxima iteração, da seguinte maneira:
Em seguida, você pode fazer um loop com segurança fazendo algo assim:
fonte
Como alternativa, você pode adiar o fechamento usando o seguinte código:
Observe que
Sleep
está usando milissegundos.fonte
Outra maneira é usar
Debugger.Break()
antes de retornar do método Mainfonte
O código está concluído. Para continuar, você precisa adicionar este:
ou
fonte
Use Console.Read (); para impedir que o programa seja fechado, mas certifique-se de adicionar o
Console.Read();
código antes da instrução return, ou será um código inacessível.verifique este Console.
fonte
Adicionar O
Read
método para mostrar a saída.fonte
Aqui está uma maneira de fazer isso sem envolver
Console
:fonte
O programa será fechado assim que a execução for concluída. Neste caso, quando você
return 0;
. Esta é a funcionalidade esperada. Se você quiser ver a saída, execute-a manualmente em um terminal ou defina uma espera no final do programa para que fique aberta por alguns segundos (usando a biblioteca de encadeamento).fonte
esta é a resposta assíncrona no aplicativo de console em c #?
qualquer coisa que o aplicativo do console nunca use,
await
mas usetheAsyncMethod().GetAwaiter().GetResult();
,exemplo
var result = await HttpClientInstance.SendAsync(message);
torna-se
var result = HttpClientInstance.SendAsync(message).GetAwaiter().GetResult();
fonte
se o seu programa exigir que você pressione enter para continuar, como você precisa digitar um valor e continuar, adicione um novo double ou int e digite write antes de retunr (0); scanf_s ("% lf", e a variável);
fonte
Eu sempre adiciono a seguinte declaração a um aplicativo de console (crie um trecho de código para isso, se desejar)
Isso ajuda quando você deseja experimentar conceitos diferentes por meio do aplicativo de console.
Ctr + F5 fará com que o console permaneça, mas você não pode depurar! Todos os aplicativos de console que escrevi no mundo real são sempre não interativos e acionados por um Agendador como o TWS ou o CA Work Station e não exigem algo assim.
fonte
Para simplificar o que os outros estão dizendo: Use
Console.ReadKey();
.Isso faz com que o programa aguarde o usuário pressionar uma tecla normal no teclado
Fonte: eu uso nos meus programas para aplicativos de console.
fonte
Você pode resolver isso de maneira muito simples, apenas chamando a entrada. No entanto, se você pressionar
Enter
, o console irá desaparecer novamente. Basta usar esteConsole.ReadLine();
ouConsole.Read();
fonte
Adicione o seguinte antes do retorno 0:
Isso imprime uma linha para pressionar uma tecla para fechar a janela. Ele manterá a janela aberta até você pressionar a tecla Enter. Meus alunos o adicionam a todos os seus programas.
fonte
De acordo com minha preocupação, se queremos estabilizar a SAÍDA DO APLICATIVO DO CONSOLE, até o fechamento da saída exibir USE, o rótulo: após o MainMethod e o rótulo goto; antes do final do programa
No programa.
por exemplo:
fonte
goto
declaração era permitida em C #.