How to stop C# console applications from closing automatically?
我在Visual Studio上的控制台应用程序正在自动关闭,所以我想使用C的system("PAUSE")之类的工具在应用程序执行结束时"暂停"应用程序,我如何才能做到这一点?
或
ReadLine()等待?,ReadKey()等待任何键(修改键除外)。
编辑:偷了达林的钥匙符号。
- "console"不包含ASP.NET 5控制台应用程序中"readkey"的定义,请访问:stackoverflow.com/questions/30588478/…
- 这实际上是一个错误的答案,因为它给了OP他们所要求的,而不是他们所需要的。告诉操作人员打破他的软件,以他启动的方式工作,这只是个坏建议。除其他外,它使在管道中使用程序变得不可能。
- 席尔瓦的答案是更好的,用Control-F5跑步
- 不过,这也会重定向输出。因此,如果您有一个计时器在运行,或者有另一个线程记录到控制台,那么您将根本看不到它。(这可能只适用于console.read,而不适用于其他方法)。
- 我的控制台应用程序需要管理员权限。因此,ctrl+f5将被请求UAC,代码将立即运行并退出。@亚当的回答是最好的。
您可以使用CtrL+F5编译(开始调试)您的工作。
试试看。我总是这样做,控制台会在上面显示我的结果。不需要附加代码。
- ctrl+f5重建应用程序(如有必要),并在新控制台窗口中运行它而不进行调试(即没有附加调试程序),在该窗口中,应用程序退出后,在同一窗口中运行pause命令或类似命令。pause提供了在控制台窗口关闭之前读取输出的机会。当从命令行使用应用程序时,不需要暂停,因为命令完成后控制台窗口不会关闭。
- @toolmakersteve它被否决了,因为它是解决OP问题的最佳方案。
- @工具制造商Steve,这是我要找的。我知道readline()和read(),我想避免这种情况。
尝试在Visual Studio中使用ctrl+f5来运行程序,这将自动添加一个带有"按任意键继续…"的暂停,而不使用任何console.readline()或readkey()函数。
Console.ReadLine()等待用户enter或Console.ReadKey等待任何键。
用途:
当有人按下任何键时关闭,或:
当用户键入内容并按Enter键时。
ctrl+f5更好,因为您不需要额外的行。最后,你可以点击进入和退出运行模式。
但是,当您使用F5启动一个程序并放置一个断点时,您可以调试您的应用程序,这给了您其他的优势。
或者,可以使用以下代码延迟关闭:
1
| System.Threading.Thread.Sleep(1000); |
注:Sleep使用毫秒。
- 线程。睡眠(TimeSpan.Fromseconds(1))如果有人想用秒进行精神工作
- System.Threading.Thread.Sleep(-1)无限期睡眠。
这些解决方案改变了程序的工作方式。
当然,您可以将#if DEBUG和#endif放在控制台调用周围,但如果您真的想阻止窗口仅在Visual Studio下的dev计算机上关闭,或者如果仅在显式配置时不运行vs,并且在从命令行运行时不希望恼人的'Press any key to exit...',则可以使用System.Diagnostics.DebuggerAPI的。
如果您只希望它在DEBUG中工作,只需将此代码包装在[Conditional("DEBUG")] void BreakConditional()方法中。
1 2 3 4 5 6 7 8 9 10 11
| // 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();
} |
这也适用于调试需要提升权限或需要提升自身权限的程序。
如果您不想关闭程序,即使用户按下任何键;
1 2 3
| while (true) {
System.Console.ReadKey();
};//This wont stop app |
- 这将创建一个无限循环。几乎没有什么好主意。
- 它等待读键,所以不连续循环,这有它的用途。如果您有其他的处理来控制应用程序,这是一个可行的解决方案。无限和超越!:)
- 假设它检测到一个按键,然后呢?它只是等待下一次按键。它不会脱离循环。只需说"使用System.Console.Readkey()",而不是用一个坏例子来混淆问题。即使如此,使用无限循环也应被视为使用goto。当你需要的时候能够使用它是很好的,但是不要仅仅因为你可以使用它!最后,在不需要的应用程序中插入"按任意键继续"是一个笨拙的黑客。这不是操作问题的解决方案。除了@slobodan stankovi的答案,这个问题的所有答案都是错误的?