8
votes

Console.writeine ​​() ne fonctionne pas

Je crée un projet C # Winforms pouvant être exécuté en tant que GUI ou peut être utilisé à partir de la ligne de commande. Actuellement, je peux traiter les intrants et les arguments de la ligne de commande. Je peux exécuter le programme de la ligne de commande et je peux utiliser le programme pour traiter les arguments. Mais la console.writeine ​​() ne fait absolument rien. Tout indice que cela pourrait être?


6 commentaires

Voyez ici: Stackoverflow.com/questions/807998/...


Vous voulez dire lors de l'exécution de votre programme en mode ligne de commande appelant console.writeline semble échouer en silence?


Pouvez-vous essayer ci-dessous simple - statique vide (String [] args) {foreach (string arg en args) {console.writeine ​​(ARG); } Console.readline (); } est-ce que ça marche?


Merci thorarin c'est probablement exactement ce que je cherchais. Donc, je suppose que même si la ligne de commande peut exécuter mon programme d'application GUI ... Afin d'écrire ou d'interagir avec elle, je dois créer une nouvelle ligne de commande et l'attacher? Est-ce exact?


Pour tous les autres: j'ai besoin du programme pour courir en guise d'interface graphique ou de commande. Ainsi modifier les paramètres du projet dans ce cas ne sera pas utile.


Dupliqué possible de console.writeline n'apparaît pas dans la fenêtre de sortie < / a>


7 Réponses :


0
votes

Cela concerne le type de projet lorsque vous le configurez sur l'onglet App sur les propriétés du projet, vous avez 3 options:

  • Demande de console
  • Win Demande
  • Bibliothèque de classe

    Si vous travaillez avec la demande Win, vous pouvez également traiter les arguments de la ligne de commande, car ceux-ci sont reçus sur la fonction principale.


0 commentaires

0
votes

Le projet doit être défini pour compiler à une application de la console pour fonctionner pour fonctionner. D'autre part, il aura toujours toujours une fenêtre de console, même lorsque vous courez comme une interface graphique. Je ne connais pas une solution de contournement pour cela (mais il serait intéressé d'entendre parler de celui-ci s'il y en a un).


0 commentaires

3
votes

Ceci est dû au fait que vous avez écrit une application WinForms - cela signifie que system.console.out (c'est-à-dire que le flux de sortie standard) est défini sur stream.null . Cela signifie que tous les appels à ce flux échoueront silencieusement.

Vous êtes en mesure de traiter l'entrée de la ligne de commande car ils proviennent d'un flux différent. La morale de l'histoire est que vous pouvez avoir une application WinForms ou une application de ligne de commande, mais pas à la fois à la fois.


2 commentaires

Oui, sorte de ... appels de l'API Windows à la rescousse :)


Cette réponse devrait être supprimée en raison de la déclaration inexacte: "La morale de l'histoire est que vous pouvez avoir une application WinForms, ou une application de ligne de commande, mais pas à la fois à la fois." GLS123 le reproche.



7
votes

Pour la plupart, voir le Répondre ici . Cependant, je voudrais souligner l'existence de l'appel freeconsole () code> API, qui vous permet de fermer gracieusement la console.

[DllImport("kernel32.dll")]
static extern int FreeConsole() 


1 commentaires

Cette solution fonctionne bien. Heureusement, je n'ai pas besoin de tuyaux. Merci!!



7
votes

Vous pouvez activer la console dans une application Windows Forms à l'aide des Dllimports suivants:

     FreeConsole();


0 commentaires

3
votes

Je l'ai fait dans un fil d'arrière-plan qui exécute une fonction d'une DLL chargée de manière dynamique (réflexion) xxx

ma console était vide jusqu'à ce que j'ai ajouté la console.setout (), je suis Pas sûr que vous devez appeler getStdhandle ()


2 commentaires

Merci, j'avais un alloconsole qui travaillait depuis un certain temps et tout à coup, il n'a plus rien. Ajouter la console.setout () a fait le tour!


Wow, il y a beaucoup de réponses sur la manière de résoudre ce problème. Les vôtres ont travaillé après avoir examiné la douzaine passée. J'utilise Kernel32 "attachconsole". Nécessaire le nouveau Streamwriter, l'autoflush à true et la configuration.



1
votes

Vous devrez peut-être changer le type d'application. Cela peut être fait en le modifiant via des propriétés de l'application dans l'interface graphique (comme expliqué dans le répondez de Consultutah) ou vous pouvez Modifier le fichier .csproj fichier :

winform / wpf: xxx

console ( c'est quoi Vous avez besoin de console.writeline () pour fonctionner ): xxx

dll (y compris les applications Web): xxx


0 commentaires