为什么控制台窗口立即closures而不显示输出?

我已经决定学习一些基本的C#(虽然我有编程经验),但是我正在遵循MSDN中的指南,但是这里的问题是他们的Hello World程序出现了,那么它会马上closures。 这是为什么?

using System; public class Hello1 { public static int Main() { Console.WriteLine("Hello, World!"); return 0; } } 

这里的问题是他们的Hello World程序正在显示,然后马上closures。
这是为什么?

因为它已经完成了。 当控制台应用程序完成执行并从main方法返回时,关联的控制台窗口将自动closures。 这是预期的行为。

如果您想保持打开以进行debugging,则需要指示计算机在结束应用程序并closures窗口之前等待按键。

Console.ReadLine方法是这样做的一种方法。 将此行添加到代码的末尾(就在return语句之前)将导致应用程序等待您在退出之前按下某个键。

或者,您可以从Visual Studio环境中按Ctrl + F5来启动应用程序,而不需要附加debugging器,但是这样做有一个明显的缺点,就是无法使用debuggingfunction,这在编写应用程序时可能需要您随时使用。

最好的折衷办法是,只有在debugging应用程序时,才能调用Console.ReadLine方法,方法是将其封装在预处理器指令中。 就像是:

 #if DEBUG Console.WriteLine("Press enter to close..."); Console.ReadLine(); #endif 

而不是使用

 Console.Readline() Console.Read() Console.ReadKey() 

您可以使用Ctrl + F5 (如果您在Visual Studio中)运行程序。 然后Visual Studio将保持控制台窗口打开,直到您按下一个键。

注意:你不能用这种方法debugging你的代码。

这对于Ctrl F5F5来说是相同的。 Main方法结束之前立即放置。

 using System.Diagnostics; private static void Main(string[] args) { DoWork(); if (Debugger.IsAttached) { Console.WriteLine("Press any key to continue . . ."); Console.ReadLine(); } } 

程序立即closures,因为没有任何东西阻止它closures。 在return 0;处插入断点 或者添加Console.Read();return 0;之前return 0; 防止程序closures。

另一种方法是在从Main方法返回之前使用Debugger.Break()

代码完成后,继续你需要添加这个:

 Console.ReadLine(); 

要么

 Console.Read(); 

使用Console.Read(); 防止程序closures,但要确保你添加了Console.Read(); 返回语句之前的代码,否则将是一个无法访问的代码。

  Console.Read(); return 0; 

检查这个Console.Read

或者,您可以使用以下代码延迟closures:

 System.Threading.Thread.Sleep(1000); 

注意Sleep使用毫秒。

添加Read方法以显示输出。

 Console.WriteLine("Hello, World!"); Console.Read(); return 0; 

我假设你不希望它在debugging模式下closures的原因,是因为你想看看variables的值等等。所以最好在主函数的closures“}”处插入一个断点。 如果你不需要debugging,那么Ctrl-F5是最好的select。

程序在执行完成后立即closures。 在这种情况下,当你return 0; 。 这是预期的function。 如果你想看到输出,那么要么手动在terminal上运行它,要么在程序结束时设置一个等待,以便它保持打开几秒钟(使用线程库)。

在返回0之前添加以下内容:

 system("PAUSE"); 

这会打印一行来打一个键来closures窗口。 它将保持窗口,直到你按Enter键。 我有我的学生将其添加到他们的所有程序。

如果你的程序要求你按Enter键继续,就像你必须input一个值并继续,然后在retunr(0)之前添加一个新的double或int并写入write。 scanf_s(“%lf”,&variables);

我总是将以下语句添加到控制台应用程序中(如果需要,可以为此创build一个代码片段)

 Console.WriteLine("Press any key to quit!"); Console.ReadKey(); 

这样做有助于您通过控制台应用程序尝试不同的概念。

Ctr + F5将使控制台停留,但你不能debugging! 我在现实世界中编写的所有控制台应用程序始终是非交互式的,并且由诸如TWS或CA Work Station等计划程序触发,不需要这样的事情。

为了简化别人的说法:使用Console.ReadKey();

这使得程序正在等待用户按下键盘上的普通键

来源:我在我的程序中用于控制台应用程序。

这很简单,只需使用这个Console.ReadLine();Console.Read();

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OOP_Encapsulation { public class Program { static void Main(string[] args) { Console.Write("Hi man"); Console.ReadLine(); return 0 } } } 

根据我的担心,如果要稳定CONSOLE APPLICATION OUTPUT,直到输出显示USEclosures,标签:MainMethod和goto标签后; 在节目结束之前

在程序中。

例如:

 static void Main(string[] args) { label: ---------- *****snippet of code***** ----------- **goto label;** } 
  • 优雅的解决scheme,复制,const和非const,getters?
  • 如何实施徽章?
  • 正则expression式仅用于数字
  • C#中的Windows进程间通信(.NET 2.0)
  • WPF – 如何强制命令通过其CommandBindings重新评估“CanExecute”
  • 调用超类构造函数的规则是什么?
  • ReaderWriterLock vs lock {}
  • 我应该什么时候在C ++中使用新的关键字?
  • 当我调用NULL对象指针的成员函数时会发生什么?
  • 回发不能作为默认文档aspx页面
  • 使用entity framework模型将不同项目中的POCO类生成到项目中