Pour rester coincé tout de suite, un exemple très basique:
using System;
using System.Windows.Forms;
class test
{
static void Main()
{
Console.WriteLine("test");
MessageBox.Show("test");
}
}
Si je compile cela avec les options par défaut (en utilisant csc en ligne de commande), comme prévu, il se compilera dans une application console. De plus, parce que j'ai importé System.Windows.Forms
, il affichera également une boîte de message.
Maintenant, si j'utilise l'option /target:winexe
, ce qui, je pense, équivaut Windows Application
à choisir parmi les options du projet, comme prévu, je ne verrai que la boîte de message et aucune sortie de console.
(En fait, au moment où il est lancé à partir de la ligne de commande, je peux émettre la commande suivante avant même que l'application ne soit terminée).
Donc, ma question est - je sais que vous pouvez avoir une sortie "windows" / formulaires à partir d'une application console, mais y a-t-il quand même pour afficher la console à partir d'une application Windows?
Réponses:
celui-ci devrait fonctionner.
la source
>
pour rediriger la sortie, j'obtiens une fenêtre de console séparée et aucune sortie dans mon fichier.C'est peut-être trop simpliste ...
Créer un projet Windows Form ...
Ensuite: Propriétés du projet -> Application -> Type de sortie -> Application console
Ensuite, la console et les formulaires peuvent fonctionner ensemble, cela fonctionne pour moi
la source
>
. Cependant, j'espérais une solution qui expliquerait comment s'exécuter en tant qu '"application console" seulement de temps en temps (c'est-à-dire pour activer par programme tout ce que changer ce paramètre mystérieux de Visual Studio). Quelqu'un sait-il comment cela fonctionne sous le capot?Si vous ne vous souciez pas d'ouvrir une console à la commande, vous pouvez accéder aux propriétés de votre projet et le changer en Application console
.
Cela affichera toujours votre formulaire ainsi qu'une fenêtre de console. Vous ne pouvez pas fermer la fenêtre de la console, mais cela fonctionne comme un excellent enregistreur temporaire pour le débogage.
N'oubliez pas de le désactiver avant de déployer le programme.
la source
Vous pouvez appeler en
AttachConsole
utilisant pinvoke pour obtenir une fenêtre de console attachée à un projet WinForms: http://www.csharp411.com/console-output-from-winforms-application/Vous pouvez également envisager Log4net ( http://logging.apache.org/log4net/index.html ) pour configurer la sortie du journal dans différentes configurations.
la source
Cela a fonctionné pour moi, pour diriger la sortie vers un fichier. Appeler la console avec
Ajoutez ce code à votre application.
J'ai trouvé ce code ici: http://www.csharp411.com/console-output-from-winforms-application/ J'ai pensé qu'il valait la peine de le poster ici également.
la source
AttachConsole(ATTACH_PARENT_PROCESS)
j'obtiens la sortie de la console mais la rediriger sur la ligne de commande avec>
ne fonctionne pas. Lorsque j'essaie cette réponse, je ne peux obtenir aucune sortie, que ce soit dans la console ou dans un fichier.Il y a essentiellement deux choses qui peuvent arriver ici.
Sortie de la console Il est possible pour un programme winforms de s'attacher à la fenêtre de console qui l'a créé (ou à une fenêtre de console différente, voire à une nouvelle fenêtre de console si vous le souhaitez). Une fois attaché à la fenêtre de la console, Console.WriteLine () etc. fonctionne comme prévu. Une solution à cette approche est que le programme retourne immédiatement le contrôle à la fenêtre de la console, puis continue à y écrire, de sorte que l'utilisateur peut également taper dans la fenêtre de la console. Vous pouvez utiliser start avec le paramètre / wait pour gérer cela, je pense.
Lien pour démarrer la syntaxe de la commande
Sortie de console redirigée C'est quand quelqu'un redirige la sortie de votre programme ailleurs, par exemple.
yourapp> fichier.txt
Dans ce cas, l'attachement à une fenêtre de console ignore effectivement la tuyauterie. Pour que cela fonctionne, vous pouvez appeler Console.OpenStandardOutput () pour obtenir un handle vers le flux vers lequel la sortie doit être redirigée. Cela ne fonctionne que si la sortie est acheminée, donc si vous souhaitez gérer les deux scénarios, vous devez ouvrir la sortie standard et y écrire et l'attacher à la fenêtre de la console. Cela signifie que la sortie est envoyée à la fenêtre de la console et au tube, mais c'est la meilleure solution que j'ai pu trouver. Ci-dessous le code que j'utilise pour ce faire.
la source
Console.WriteLine
à la place le nouveauWriteLine
défini ci-dessus. Même si j'ai essayé de ne pas pouvoir avec ce code obtenir quoi que ce soit redirigé vers un fichier lors de l'exécution de l'application sur la ligne de commande et de la redirection>
vers un fichier.Console.WriteLine
est juste une bonne pratique, car elle vous permet de tester et de modifier facilement les endroits auxquels vous vous connectez (par exemple, vous voudrez peut-être commencer à vous connecter à un service de journalisation basé sur le cloud comme PaperTrail, ou autre. )StreamWriter _stdOutWriter;
Créez une application Windows Forms et modifiez le type de sortie en Console.
Il en résultera à la fois une console et le formulaire à ouvrir.
la source
la source
la source
StandardHandle : uint
est faux ici ... devrait être IntPtr pour fonctionner à la fois sur x86 et x64Vous pouvez à tout moment basculer entre les types d'applications, la console ou les fenêtres. Donc, vous n'écrirez pas de logique spéciale pour voir le stdout. En outre, lors de l'exécution de l'application dans le débogueur, vous verrez tous les stdout dans la fenêtre de sortie. Vous pouvez également simplement ajouter un point d'arrêt, et dans les propriétés du point d'arrêt, modifier "Quand il est atteint ...", vous pouvez afficher tous les messages et variables. Vous pouvez également cocher / décocher "Continuer l'exécution", et votre point d'arrêt deviendra carré. Ainsi, les messages de point d'arrêt sans rien changer dans l'application dans la fenêtre de sortie de débogage.
la source
Pourquoi ne pas simplement la laisser en tant qu'application Window Forms et créer un formulaire simple pour imiter la console. Le formulaire peut être conçu pour ressembler à la console à écran noir et répondre directement à la pression d'une touche. Ensuite, dans le fichier program.cs, vous décidez si vous devez exécuter le formulaire principal ou le ConsoleForm. Par exemple, j'utilise cette approche pour capturer les arguments de ligne de commande dans le fichier program.cs. Je crée le ConsoleForm, je le cache initialement, puis je passe les chaînes de ligne de commande à une fonction AddCommand, qui affiche les commandes autorisées. Enfin, si l'utilisateur a donné le -h ou -? , j'appelle le .Show sur le ConsoleForm et lorsque l'utilisateur appuie sur une touche, j'arrête le programme. Si l'utilisateur ne donne pas le -? commande, je ferme le ConsoleForm caché et lance le formulaire principal.
la source