Estoy creando un proyecto de C# winforms que se puede ejecutar como una GUI o se puede operar desde la línea de comandos. Actualmente, puedo procesar la entrada y los argumentos de la línea de comando. Puedo ejecutar el programa desde la línea de comandos y puedo usar el programa para procesar los argumentos. Pero Console.Writeline() no hace absolutamente nada. ¿Alguna pista de por qué podría ser?Console.Writeline() no funciona
Respuesta
En su mayor parte, consulte el answer here. Sin embargo, me gustaría señalar la existencia de la llamada a la API FreeConsole()
, que le permite cerrar la consola con gracia.
[DllImport("kernel32.dll")]
static extern int FreeConsole()
Una cosa que me gustaría Nota: es posible ver algunos extraño es un símbolo del sistema que aparece en la parte delantera de su salida de la consola, si usted está lanzando desde una consola existente y uniendo a que con AttachConsole
(como se opuesto a AllocConsole
).
Este es un problema de temporización que es difícil de solucionar. Si eso es un problema, configure su aplicación para que sea una aplicación de consola como las otras sugeridas. Sin embargo, no tendrá el efecto de que aparezca un símbolo del sistema hasta que se cierre la aplicación, lo que podría no ser lo que desea si está abriendo un formulario de win.
En respuesta a tu comentario: o está AttachConsole
oAllocConsole
. El ejemplo que he vinculado intenta conectarse a una consola existente primero. Si eso falla (probablemente porque no existe), crea una nueva ventana de consola.
Si encuentra una manera de obtener lo mejor de ambos mundos en términos de comportamiento de línea de comandos y modo interactivo GUI, hágamelo saber. No he hecho una búsqueda exhaustiva de una solución, pero tengo algunas aplicaciones menores que se beneficiarían.
Por cierto: si planeas utilizar pipes en tu línea de comandos (redireccionando la salida a un archivo, por ejemplo), eso no funcionará así por desgracia.
Esta solución funciona muy bien. Afortunadamente no necesito tuberías. ¡¡Gracias!! – novacara
Tiene que ver con el tipo de proyecto que se configura en la pestaña de aplicaciones en las propiedades del proyecto, que tienen 3 opciones:
- aplicación de consola
- Win Aplicación
- Biblioteca de clases
Sin embargo, si trabaja con la aplicación Win, también puede procesar los argumentos de línea de comando, ya que estos se reciben en la función Principal.
El proyecto debe configurarse para compilarse en una aplicación de consola para que funcione la consola. Por otro lado, siempre tendrá una ventana de consola, incluso cuando se ejecuta como GUI. No sé de una solución para esto (pero estaría interesado en saber si hay alguno).
Esto se debe a que ha escrito una aplicación de winforms; esto significa que System.Console.Out
(es decir, la secuencia de salida estándar) está configurada en Stream.Null
. Esto significa que cualquier llamada a esa secuencia fallará en silencio.
Puede procesar la entrada desde la línea de comandos porque provienen de una secuencia diferente. La moraleja de la historia es que puedes tener una aplicación de winforms o una aplicación de línea de comando, pero no ambas a la vez.
Sí, tipo de ... Windows API llama al rescate :) – Thorarin
Puede activar la consola en una aplicación de formas de las ventanas usando los siguientes DllImports:
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern int FreeConsole();
A continuación, puede activar la consola usando:
AttachConsole(ATTACH_PARENT_PROCESS);
Y se puede desactivar usando:
FreeConsole();
Hice esto en un hilo de fondo que ejecuta una función desde una carga dinámica DLL (reflexión)
AllocConsole();
IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput());
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
//
//Console writing here
//
FreeConsole();
Mi consola estaba en blanco hasta que he añadido el Console.SetOut(), no estoy seguro de que necesita llamar GetStdHandle()
Gracias, tenía una AllocConsole que funcionaba desde hacía tiempo, y de repente ya no funcionaba. Añadiendo Console.SetOut() hizo el truco! –
Es posible que necesite cambiar el tipo de aplicación. Esto se puede hacer por cualquiera de cambiarlo a través de propiedades de la aplicación en la interfaz gráfica de usuario (como se explica en el answer de ConsultUtah) o puede editar el archivo .csproj
:
Winform/WPF:
<OutputType>WinExe</OutputType>
consola (esto es lo que necesita para console.writeline()
a estar trabajando):
<OutputType>Exe</OutputType>
DLL (incluyendo applicatio web ns):
<OutputType>Library</OutputType>
- 1. ¿Console.WriteLine bloquea?
- 2. Cómo Console.WriteLine desde [TestMethod]?
- 3. console.writeline y System.out.println
- 4. Console.WriteLine como hexadecimal
- 5. ¿El subproceso console.writeline es seguro?
- 6. Cómo usar Console.WriteLine en ASP.Net MVC 3
- 7. Console.WriteLine no aparece en la ventana de salida
- 8. windows form .. console.writeline() ¿dónde está la consola?
- 9. Console.WriteLine() dentro de un servicio de Windows?
- 10. ¿A dónde va Console.WriteLine en ASP.NET?
- 11. MemoryCache UpdateCallback no funciona
- 12. Cadenas de formato en el método Console.WriteLine
- 13. Uso de memoria alta con Console.WriteLine()
- 14. Cómo usar Console.WriteLine en ASP.NET (C#) durante la depuración?
- 15. Diccionario insensible a mayúsculas/minúsculas no funciona
- 16. WCF REST Servicio: InstanceContextMode.PerCall no funciona
- 17. no funciona
- 18. Uso de Console.WriteLine dentro de una aplicación de Windows Forms
- 19. Redirecciona console.writeline desde la aplicación de Windows a una cadena
- 20. StructLayout Pack = 1 no funciona con bool?
- 21. (Console.BufferHeight) No puedo ver/desplazarme para ver toda la salida de la consola con Console.WriteLine
- 22. DateTime.AddDays() no funciona como se esperaba
- 23. ¿Cómo esperas la entrada en la misma línea Console.WriteLine()?
- 24. ¿Cuál es la diferencia entre Console.WriteLine() vs Debug.WriteLine()?
- 25. versión de Android de la consola Console.WriteLine de C#?
- 26. Nhibernate LINQ DateTime.AddDay no funciona
- 27. ¿La ruta UNC no funciona con .NET?
- 28. delegado C# no funciona como debería?
- 29. Window.open location = no no funciona
- 30. ¿Por qué $() no funciona pero funciona jQuery()?
Ver aquí: http://stackoverflow.com/questions/807998/how-do-i-create-ac-app-that-decides-itself-whether-to-show-as- a-console-o-wind – Thorarin
¿Quiere decir cuando ejecuta su programa en modo de línea de comandos llamando a Console.WriteLine parece fallar silenciosamente? –
Se puede tratar a continuación sencilla - void Main (string [] args) {estáticas foreach (arg cadena en args) { Console.WriteLine (arg); } Console.ReadLine(); } ¿funciona? – Mutant