Comment faire pour exécuter la forme et de la console en même temps avec c#?
Hey, je suis assez nouveau dans le langage de programmation c# et ont apprécié mon expérience jusqu'à présent. J'ai l'habitude de développer des applications en java, mais une nécessité pour win32 bibliothèque m'a conduit à c# jusqu'à présent, les langues semblent relativement similaires. cependant un problème que j'ai en ce moment est un simple morceau de code qui peut être mieux expliqué dans cet exemple
Je suis en train d'imprimer un morceau de fil à la console d'afficher le formulaire de windows puis imprimer un autre morceau de fil à la console. cependant, le résultat que j'obtiens est la première chaîne est imprimé puis le formulaire est affiché, j'ai ensuite fermer le formulaire avant la dernière chaîne est imprimé. la question que je voudrais poser est est-il de toute façon pour obtenir ce travail, pour la deuxième impression de la console s'affiche immédiatement après l'affichage du formulaire. im deviner qu'il a quelque chose à voir avec filetage, mais je ne suis pas entièrement sûr de savoir comment mettre en œuvre cette
OriginalL'auteur SteveCapegoat | 2009-12-31
Vous devez vous connecter pour publier un commentaire.
La solution est assez simple:
Il suffit de créer une Application Windows Forms (lors de la création du projet, vous n'avez probablement), puis allez dans les Propriétés (dans le contexte de menu "Projet", c'est le dernier élément) et réglez "type de Sortie" à "Console Application". Les formulaires fonctionne comme avant, et de plus, cette application va maintenant ouvrir la console aussi. Vous pouvez ensuite librement à l'écriture ou à la lecture à partir de la console.
OriginalL'auteur Ota
Il semble que vous voulez être en mesure de produire des messages à la console, tandis que le formulaire est affiché, correct? La question fondamentale est que tant que le formulaire est visible, il doit y avoir une boucle de message en cours d'exécution, la gestion des événements de la forme. La boucle de message est à l'intérieur de l'Application.Exécuter, donc une fois que vous l'appelez, il ne reviendra pas jusqu'à ce que le formulaire est fermé (comme vous l'avez découvert).
Donc, si vous voulez écrire dans la console, tandis que la forme est visible, vous avez quelques options. L'un, comme vous l'avez mentionné, est l'utilisation de plusieurs threads. Laissez votre thread principal exécuter la boucle de message, et le démarrage d'un deuxième thread écrire dans la console. Mais ce n'est pas nécessaire-vous pouvez également écrire à la console à partir dans un gestionnaire d'événements, directement ou indirectement. Il n'y a rien de mal à faire une Console.WriteLine à partir de l'intérieur d'un clic sur un bouton gestionnaire. Ou vous pouvez avoir votre gestionnaire de bouton appeler une méthode dans votre Programme de classe, et de faire de l'écriture.
Comme pour une solution qui est mieux, il serait utile d'en savoir plus sur ce que vous essayez d'accomplir. Je suppose que vous n'avez pas envie d'écrire des trucs à la console--quoi d'autre est-ce que vous voulez faire lorsque le formulaire est affiché?
Vous ne devriez pas avoir à utiliser un thread juste pour mettre en œuvre une architecture MVC (et je vous mets en garde contre l'utilisation de threads, sauf si vous avez--ils sont compliqués et notoirement difficiles à obtenir à droite). Juste parce que votre modèle, à la vue, et le pilote sont dans des classes séparées, ne signifie pas qu'ils ont à exécuter dans des threads séparés. Une recherche Google pour "windows forms mvc" devrait vous donner quelques conseils sur la façon de mettre en œuvre MVC dans une application Windows Forms.
OriginalL'auteur Aaron
Ma suggestion serait de commencer avec une application Console. Vous pouvez toujours ouvrir un WinForm partir d'une application console...qui vous donnera exactement ce que vous cherchez. (vous voudrez peut-être penser multi-threading.
OriginalL'auteur Justin Niessner
Eh bien, c'est juste ridicule, si vous me demandez...mais, vous pouvez simplement appeler Application.La sortie lorsque le formulaire se ferme, et de modifier votre Main() comme ceci: Console.WriteLine("première chaîne"); var form = new Form1(); forme.Show(); Application.Run(); Console.WriteLine("la deuxième chaîne de caractères"); Application.Run(); Ensuite, vous serez à gauche avec seulement la fenêtre de la console affichant les deux chaînes.
OriginalL'auteur Eric Dahlvang
Salut tout le monde merci pour vos réponses j'ai fait quelques progrès avec ce que j'essaie de réaliser, mais im pas sûr de savoir comment les corriger ou de les thread-safe, il est là, c'est le code que j'ai eu à exécuter
pls laissez-moi savoir ce que vous pensez de cette solution
Désolé Rob je vais garder cette de noter pour l'avenir
OriginalL'auteur SteveCapegoat
êtes-vous à l'aide de
form.showDialog()
ouform.show()
?form.showDialog()
bloquera jusqu'à ce que le formulaire est fermé, tandis queform.show()
ne sera pas.ok, bon. mais je n'ai aucune idée de comment le résoudre votre problème. 🙂
OriginalL'auteur echo
Je voudrais commencer avec une application console et exécutez l'application à partir de la statique de la fonction principale. C'est à partir de la mémoire - je n'ai pas eu à jouer avec Winforms depuis des années:
ou
Je voudrais rediriger la Console.Et le crier flux dans une certaine sorte de contrôle, comme une zone de texte ou une zone de liste. C'est beaucoup de code mais c'est faisable... j'ai écrit ça avant de sur place de débogage, mais n'ont pas le code à portée de main.
OriginalL'auteur Jason Jackson
Pourquoi ne pas simplement créer un nouveau formulaire de windows avec zone de texte multiligne et de l'ancrer à la forme, l'ensemble BackColor que le Noir ForeColor Blancs et de créer une méthode pour envoyer un texte pour que la zone de texte.
Si votre objectif est une Forme d'application cela fonctionne assez bien avec brio.
OriginalL'auteur Pedro
Je sais que c'est un super-vieille question, mais je vais répondre dans l'espoir de karma. Un travail intéressant autour qui fonctionne bien pour que cela arrive si vous utilisez Visual Studio (qui est une supposition assez fiable). Si vous démarrez un projet de formulaires en C# dans Visual Studio, puis apportez vos formulaires appropriés, mais alors changement le type de projet pour une application console (par clic-droit sur le projet - >propriétés - >Console d'Application), il sera toujours spawn vos formes, mais également de conserver une Console ouverte, maintenant tout ce que vous devez faire est de mettre une Console.Écrire déclaration avant que le formulaire est créé, et l'autre après, et peut-être ajouter un éclat déclaration!
OriginalL'auteur user1028435