J'étudie C # en suivant les guides de MSDN .
Maintenant, je viens d'essayer l' exemple 1 ( voici le lien vers MSDN ), et j'ai rencontré un problème: pourquoi la fenêtre de la console se ferme-t-elle immédiatement une fois ma sortie affichée?
using System;
public class Hello1
{
public static int Main()
{
Console.WriteLine("Hello, World!");
return 0;
}
}
c#
.net
console-application
msdn
user962206
la source
la source
Réponses:
Parce que c'est fini. Lorsque les applications de la console ont terminé l'exécution et retournent de leur
main
méthode, la fenêtre de la console associée se ferme automatiquement. Il s'agit d'un comportement attendu.Si vous souhaitez le garder ouvert à des fins de débogage, vous devrez demander à l'ordinateur d'attendre une pression sur une touche avant de mettre fin à l'application et de fermer la fenêtre.
La
Console.ReadLine
méthode est une façon de faire cela. Si vous ajoutez cette ligne à la fin de votre code (juste avant l'return
instruction), l'application attendra que vous appuyiez sur une touche avant de quitter.Vous pouvez également démarrer l'application sans le débogueur attaché en appuyant sur Ctrl+ à F5partir de l'environnement Visual Studio, mais cela présente l'inconvénient évident de vous empêcher d'utiliser les fonctionnalités de débogage, que vous souhaitez probablement à votre disposition lors de l'écriture d'une application.
Le meilleur compromis est probablement d'appeler la
Console.ReadLine
méthode uniquement lors du débogage de l'application en l'enveloppant dans une directive de préprocesseur. Quelque chose comme:Vous pouvez également souhaiter que la fenêtre reste ouverte si une exception non interceptée a été levée. Pour ce faire, vous pouvez mettre le
Console.ReadLine();
dans unfinally
bloc:la source
if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine();
.À la place d'utiliser
vous pouvez exécuter votre programme en utilisant Ctrl+ F5(si vous êtes dans Visual Studio). Ensuite, Visual Studio gardera la fenêtre de la console ouverte jusqu'à ce que vous appuyiez sur une touche.
Remarque: vous ne pouvez pas déboguer votre code dans cette approche.
la source
Ctrl + F5
fait différemment qui fait tout simplementStart
différemment?Je suppose que la raison pour laquelle vous ne voulez pas qu'il se ferme en mode Débogage, c'est parce que vous voulez regarder les valeurs des variables etc. Il est donc probablement préférable d'insérer simplement un point d'arrêt sur la fermeture "}" de la fonction principale . Si vous n'avez pas besoin de déboguer, alors Ctrl-F5 est la meilleure option.
la source
Cela se comporte de la même manière pour CtrlF5ou F5. Placer immédiatement avant la fin de la
Main
méthode.la source
Console.ReadKey()
pour n'importe quelle touche,Console.ReadLine()
attend que vous appuyiez sur EntréeLe programme se ferme immédiatement car rien ne l'empêche de se fermer. Insérez un point d'arrêt à
return 0;
ou ajoutezConsole.Read();
avantreturn 0;
pour empêcher le programme de se fermer.la source
Je suis un peu en retard à la fête, mais: dans Visual Studio 2019 pour les projets .NET Core, la console ne se ferme pas automatiquement par défaut. Vous pouvez configurer le comportement via le menu Outils → Options → Débogage → Général → Fermer automatiquement la console lorsque le débogage s'arrête. Si vous obtenez la fermeture automatique de la fenêtre de votre console, vérifiez si le paramètre mentionné n'est pas défini.
La même chose s'applique aux projets de console de nouveau style .NET Framework:
L'ancien projet .NET Framework ferme toujours inconditionnellement la console à la fin (à partir de Visual Studio 16.0.1).
Référence: https://devblogs.microsoft.com/dotnet/net-core-tooling-update-for-visual-studio-2019-preview-2/
la source
Si vous souhaitez garder votre application ouverte, vous devez faire quelque chose pour maintenir son processus en vie. L'exemple ci-dessous est le plus simple, à mettre à la fin de votre programme:
Cependant, cela entraînera une surcharge du processeur, car il est donc obligé d'itérer à l'infini.
À ce stade, vous pouvez choisir d'utiliser la
System.Windows.Forms.Application
classe (mais cela vous oblige à ajouter uneSystem.Windows.Forms
référence):Cela ne fuit pas le processeur et fonctionne avec succès.
Afin d'éviter d'ajouter une
System.Windows.Forms
référence, vous pouvez utiliser une astuce simple, la soi-disant attente de rotation , en importantSystem.Threading
:Cela fonctionne également parfaitement et consiste essentiellement en une
while
boucle avec une condition négative renvoyée par la méthode lambda ci-dessus. Pourquoi ce processeur ne surcharge-t-il pas? Vous pouvez consulter le code source ici ; Quoi qu'il en soit, il attend essentiellement un cycle du processeur avant de recommencer.Vous pouvez également créer un boucleur de messages, qui examine les messages en attente du système et traite chacun d'eux avant de passer à l'itération suivante, comme suit:
Ensuite, vous pouvez boucler en toute sécurité en faisant quelque chose comme ceci:
la source
Vous pouvez également retarder la fermeture à l'aide du code suivant:
Notez que le
Sleep
utilise des millisecondes.la source
Une autre façon est d'utiliser
Debugger.Break()
avant de revenir de la méthode Mainla source
Le code est terminé, pour continuer, vous devez ajouter ceci:
ou
la source
Utilisez Console.Read (); pour empêcher le programme de se fermer, mais assurez-vous d'ajouter le
Console.Read();
code avant l'instruction return, sinon ce sera un code inaccessible.vérifiez cette console.
la source
Add La
Read
méthode pour afficher la sortie.la source
Voici une façon de le faire sans impliquer
Console
:la source
Le programme se ferme dès que son exécution est terminée. Dans ce cas, lorsque vous
return 0;
. C'est une fonctionnalité attendue. Si vous voulez voir la sortie, exécutez-la manuellement dans un terminal ou définissez une attente à la fin du programme afin qu'elle reste ouverte pendant quelques secondes (en utilisant la bibliothèque de threads).la source
c'est la réponse asynchrone à l'application console en C #?
n'importe où dans l'application console, n'utilisez jamais
await
mais utilisez plutôttheAsyncMethod().GetAwaiter().GetResult();
,exemple
var result = await HttpClientInstance.SendAsync(message);
devient
var result = HttpClientInstance.SendAsync(message).GetAwaiter().GetResult();
la source
si votre programme vous oblige à appuyer sur Entrée pour continuer comme vous devez entrer une valeur et continuer, ajoutez un nouveau double ou int et tapez write avant retunr (0); scanf_s ("% lf", & la variable);
la source
J'ajoute toujours l'instruction suivante à une application console (créez un extrait de code pour cela si vous le souhaitez)
Cela aide lorsque vous souhaitez expérimenter différents concepts via une application console.
Ctr + F5 fera rester la console mais vous ne pouvez pas déboguer! Toutes les applications console que j'ai écrites dans realworld sont toujours non interactives et déclenchées par un planificateur tel que TWS ou CA Work station et ne nécessitent pas quelque chose comme ça.
la source
Pour simplifier ce que les autres disent: utilisez
Console.ReadKey();
.Cela permet au programme d'attendre que l'utilisateur appuie sur une touche normale du clavier
Source: je l'utilise dans mes programmes pour les applications console.
la source
Vous pouvez le résoudre de manière très simple en invoquant simplement l'entrée. Cependant, si vous appuyez sur,
Enter
la console disparaîtra à nouveau. Utilisez simplement ceciConsole.ReadLine();
ouConsole.Read();
la source
Ajoutez ce qui suit avant le retour 0:
Cela imprime une ligne pour frapper une touche pour fermer la fenêtre. Il gardera la fenêtre ouverte jusqu'à ce que vous appuyiez sur la touche Entrée. Je demande à mes étudiants de l'ajouter à tous leurs programmes.
la source
Selon ma préoccupation, si nous voulons stabiliser la SORTIE DE L'APPLICATION CONSOLE, jusqu'à la fermeture de la sortie affiche USE, le label: après la MainMethod, et goto label; avant la fin du programme
Dans le programme.
par exemple:
la source
goto
déclaration était autorisée en C #.