Estoy estudiando C # siguiendo las guías en MSDN .
Ahora, acabo de probar el Ejemplo 1 ( aquí está el enlace a MSDN ), y he encontrado un problema: ¿por qué la ventana de la consola se cierra inmediatamente una vez que se muestra mi salida?
using System;
public class Hello1
{
public static int Main()
{
Console.WriteLine("Hello, World!");
return 0;
}
}
c#
.net
console-application
msdn
usuario962206
fuente
fuente
Respuestas:
Porque ya está terminado. Cuando las aplicaciones de consola han completado la ejecución y el retorno de su
main
método, la ventana de consola asociada se cierra automáticamente. Este es el comportamiento esperado.Si desea mantenerlo abierto para fines de depuración, deberá indicarle a la computadora que espere a presionar una tecla antes de finalizar la aplicación y cerrar la ventana.
El
Console.ReadLine
método es una forma de hacerlo. Agregar esta línea al final de su código (justo antes de lareturn
declaración) hará que la aplicación espere a que presione una tecla antes de salir.Alternativamente, puede iniciar la aplicación sin el depurador conectado presionando Ctrl+ F5desde el entorno de Visual Studio, pero esto tiene la desventaja obvia de evitar que use las funciones de depuración, que probablemente quiera tener a su disposición al escribir una aplicación.
El mejor compromiso es probablemente llamar al
Console.ReadLine
método solo cuando depure la aplicación envolviéndola en una directiva de preprocesador. Algo como:También es posible que desee que la ventana permanezca abierta si se produce una excepción no detectada. Para hacer eso puedes poner el
Console.ReadLine();
en unfinally
bloque:fuente
if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine();
.En lugar de usar
puedes ejecutar tu programa usando Ctrl+ F5(si estás en Visual Studio). Luego, Visual Studio mantendrá abierta la ventana de la consola, hasta que presione una tecla.
Nota: No puede depurar su código en este enfoque.
fuente
Ctrl + F5
diferente que simplemente bonitoStart
hace diferente?Supongo que la razón por la que no desea que se cierre en modo de depuración es porque desea ver los valores de las variables, etc. Por lo tanto, probablemente sea mejor insertar un punto de interrupción en el cierre "}" de la función principal . Si no necesita depurar, entonces Ctrl-F5 es la mejor opción.
fuente
Esto se comporta igual para CtrlF5o F5. Colocar inmediatamente antes del final del
Main
método.fuente
Console.ReadKey()
para cualquier tecla,Console.ReadLine()
espera a que se presione EnterEl programa se cierra inmediatamente porque no hay nada que lo detenga. Inserte un punto de interrupción en
return 0;
o agregueConsole.Read();
antesreturn 0;
para evitar que el programa se cierre.fuente
Llego un poco tarde a la fiesta, pero: en Visual Studio 2019 para proyectos .NET Core, la consola no se cierra automáticamente de forma predeterminada. Puede configurar el comportamiento a través del menú Herramientas → Opciones → Depuración → General → Cerrar automáticamente la consola cuando se detiene la depuración. Si la ventana de la consola se cierra automáticamente, verifique si la configuración mencionada no está establecida.
Lo mismo se aplica a los proyectos de consola de estilo nuevo de .NET Framework:
El antiguo proyecto de .NET Framework todavía cierra incondicionalmente la consola al final (a partir de Visual Studio 16.0.1).
Referencia: https://devblogs.microsoft.com/dotnet/net-core-tooling-update-for-visual-studio-2019-preview-2/
fuente
Si desea mantener abierta su aplicación, debe hacer algo para mantener vivo su proceso. El siguiente ejemplo es el más simple, que se colocará al final de su programa:
Sin embargo, hará que la CPU se sobrecargue, ya que por lo tanto se ve obligada a iterar infinitamente.
En este punto, puede optar por usar la
System.Windows.Forms.Application
clase (pero requiere que agregueSystem.Windows.Forms
referencia):Esto no pierde la CPU y funciona con éxito.
Para evitar agregar
System.Windows.Forms
referencias, puede usar un simple truco, el llamado giro en espera , importandoSystem.Threading
:Esto también funciona perfectamente, y básicamente consiste en un
while
bucle con una condición negada que es devuelta por el método lambda anterior. ¿Por qué no se sobrecarga esta CPU? Puedes ver el código fuente aquí ; de todos modos, básicamente espera un ciclo de CPU antes de repetir.También puede crear un bucleador de mensajes, que mira los mensajes pendientes del sistema y procesa cada uno de ellos antes de pasar a la siguiente iteración, de la siguiente manera:
Luego, puede realizar un bucle de forma segura haciendo algo como esto:
fuente
Alternativamente, puede retrasar el cierre con el siguiente código:
Tenga en cuenta que
Sleep
está utilizando milisegundos.fuente
Otra forma es usar
Debugger.Break()
antes de regresar del método Mainfuente
El código está terminado, para continuar necesita agregar esto:
o
fuente
Use Console.Read (); para evitar que el programa se cierre, pero asegúrese de agregar el
Console.Read();
código antes de la declaración de devolución, de lo contrario será un código inalcanzable.revisa esta consola.
fuente
Agregar El
Read
método para mostrar la salida.fuente
Aquí hay una manera de hacerlo sin involucrar
Console
:fuente
El programa se cierra tan pronto como se completa su ejecución. En este caso cuando tú
return 0;
. Esta es la funcionalidad esperada. Si desea ver el resultado, ejecútelo manualmente en un terminal o establezca una espera al final del programa para que permanezca abierto durante unos segundos (utilizando la biblioteca de subprocesos).fuente
esta es la respuesta asincrónico en aplicación de consola en C #?
nada dondequiera en la aplicación de la consola nunca uso
await
, pero en lugar de utilizartheAsyncMethod().GetAwaiter().GetResult();
,ejemplo
var result = await HttpClientInstance.SendAsync(message);
se convierte
var result = HttpClientInstance.SendAsync(message).GetAwaiter().GetResult();
fuente
si su programa requiere que presione enter para continuar, como si tuviera que ingresar un valor y continuar, luego agregue un nuevo doble o int y escriba write antes de retunr (0); scanf_s ("% lf", y la variable);
fuente
Siempre agrego la siguiente declaración a una aplicación de consola. (Si lo desea, cree un fragmento de código para esto)
Hacer esto ayuda cuando quieres experimentar diferentes conceptos a través de la aplicación de consola.
¡Ctr + F5 hará que la consola se quede pero no puede depurar! Todas las aplicaciones de consola que he escrito en el mundo real siempre son no interactivas y son activadas por un Programador como la estación de trabajo TWS o CA y no requieren algo como esto.
fuente
Para simplificar lo que otros dicen: use
Console.ReadKey();
.Esto hace que el programa esté esperando que el usuario presione una tecla normal en el teclado
Fuente: Lo uso en mis programas para aplicaciones de consola.
fuente
Puede resolverlo de manera muy simple simplemente invocando la entrada. Sin embargo, si presiona
Enter
, la consola volverá a fallar. Simplemente use estoConsole.ReadLine();
oConsole.Read();
fuente
Agregue lo siguiente antes del retorno 0:
Esto imprime una línea para presionar una tecla para cerrar la ventana. Mantendrá la ventana abierta hasta que presione la tecla Intro. Mis alumnos lo agregan a todos sus programas.
fuente
Según mi preocupación, si queremos estabilizar la APLICACIÓN DE LA SALIDA DE LA CONSOLA, hasta el cierre de la salida, se muestra USE, la etiqueta: después de MainMethod y goto label; antes del final del programa
En el programa.
p.ej:
fuente
goto
declaración se permitía incluso en C #.