如何防止C#控制台应用程序自动关闭?

440

我的Visual Studio控制台应用程序在执行结束后会自动关闭。我希望在程序执行完后“暂停”应用程序,以便我可以轻松检查输出结果。如何实现这一点?

9个回答

653

更新:

Visual Studio 2017 起,IDE 中有一个内置选项:

Tools > Options > Debugging > Automatically close the console when debugging stops

取消勾选它会在执行结束时自动暂停应用程序,允许您轻松检查其输出,而无需向应用程序添加额外的代码。


有两种方法;

Console.ReadLine();

ReadLine() 方法等待用户按下 键。

或者

Console.ReadKey();

ReadKey() 等待任意键(除了修饰键)。


2
在asp.net 5控制台应用程序中出现“'Console'不包含'ReadKey'的定义”的错误,请访问以下链接:https://dev59.com/OV0a5IYBdhLWcg3wNWXA - Paul Totzke
19
这实际上是一个糟糕的回答,因为它只回应了提问者所问而不是他们所需要的。告诉提问者去打破自己的软件以适应他使用的方式只是错误的建议。除此之外,这样做会使该程序无法在管道中使用。 - David Schwartz
2
Silva的回答更好,使用Control-F5运行。 - Del
我的控制台应用程序需要管理员权限。因此,CTRL+F5会要求UAC并运行代码,然后立即退出。 @Adam的回答是最好的。 - vee
Console.ReadLine(),当只需要“按任意Enter键…”时使用。;-P 无论如何都会得到我的赞。 - Robin Davies
显示剩余2条评论

210

你可以使用Ctrl+F5编译(开始调试)你的工作。

试试吧。我总是这么做,控制台会显示我的结果。


3
然而,对于在 Visual Studio 之外运行控制台程序的人来说,这并不实用。例如:双击 .exe 文件。 - NickLokarno
显然不再是这样了,Console.ReadKey(); 仍然运行良好。 - joe blogs

53

在Visual Studio中,尝试使用Ctrl + F5运行你的程序,这将自动添加一个暂停并显示"Press any key to continue...",而无需使用任何Console.Readline()或ReadKey()函数。


47

Console.ReadLine()会等待用户输入EnterConsole.ReadKey()则会等待任意键。


29

使用:

Console.ReadKey();
为了让它在有人按下任意键时关闭,或者:
Console.ReadLine();

当用户输入内容并按下回车键时使用。


18

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

System.Threading.Thread.Sleep(1000);

注意Sleep使用的是毫秒。


16
Thread.Sleep(TimeSpan.FromSeconds(1)) 可以让代码等待一秒钟。 - Frison Alexander
13
使用System.Threading.Thread.Sleep(-1)可以无限期地暂停线程。 - Ari Seyhun

16

Ctrl + F5更好,因为您不需要额外的线路。 而且,在最后,您可以按Enter键并退出运行模式。

但是,当您使用F5启动程序并设置断点时,您可以调试应用程序,并获得其他优势。


11

提到的解决方案会改变你的程序运作方式。

当然,你可以在控制台调用周围放置#if DEBUG#endif,但如果你真的想防止窗口在 Visual Studio 下关闭,并且只有在配置正确时才能确保不关闭,在命令行下运行时也不想看到烦人的 'Press any key to exit...',那么使用System.Diagnostics.Debugger API 是一种方法。

如果你只想在DEBUG中起作用,只需将此代码包装在一个[Conditional("DEBUG")] void BreakConditional()方法中即可。

// Test some configuration option or another
bool launch;
var env = Environment.GetEnvironmentVariable("LAUNCH_DEBUGGER_IF_NOT_ATTACHED");
if (!bool.TryParse(env, out launch))
    launch = false;

// Break either if a debugger is already attached, or if configured to launch
if (launch || Debugger.IsAttached) {
    if (Debugger.IsAttached || Debugger.Launch())
        Debugger.Break();
}

这也适用于调试需要提升权限的程序,或者需要能够自我提升的程序。


2
如果您不想让程序在用户按下任意键时关闭;
 while (true) {
      System.Console.ReadKey();                
 };//This wont stop app

10
这会创建一个无限循环,几乎从来不是一个好主意。 - Fuzzy Logic
3
如果您将应用程序作为服务运行,这将导致100%的CPU使用率。 - Sir Crusher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接