我在Visual Studio中创建了一个空白的C#控制台应用程序,如下所示:
using System;
namespace ConsoleApplication1
{
class Solution
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
}
当我按F5使用默认的Start Debugging
选项时,程序按预期正常运行。我按Enter键,程序结束。
但是当我按Ctrl + F5使用Start Without Debugging
选项时,按Enter键后,它会在控制台上显示一条额外的消息:
按任意键继续...
然后我要按键盘上的另一个键来终止程序。这个神奇的信息从哪里来,为什么只在Start Without Debugging
选项中显示?
注意:项目的构建后事件命令行是完全空的。
这就是visual studio如何运行不在调试模式下的控制台程序。据我所知,它无法控制。因为它显示它实际上是一个cmd.exe实例而不仅仅是一个控制台窗口我假设VS在命令行上使用/ K标志(我以为它使用了批处理文件,但现在看到没有必要)。
这是针对控制台程序运行并且简单退出的典型情况,没有该消息,这样的程序将不会给出任何查看输出的机会。
这是C#控制台应用程序的默认行为。根据你的代码,你写的主要功能Console.ReadLine();
接受用户的按键操作。在此之前它保持屏幕显示按任意键继续。大多数情况下,命令Console.ReadLine()
用于读取应用程序的用户输入。您可以在哪里直接将用户输入的值分配给您输入的变量。
我能够在他的回答中验证@SoronelHaetir分享的信息。我借助一些截图来详细说明这些内容,这些截图将补充他帖子中的信息并帮助您更好地理解相同内容:
Start Debugging
选项运行应用程序时,我们可以看到应用程序的可执行文件在任务管理器中启动:当我右键单击任务并从上下文菜单中选择Go To Process
选项时,我将进入具有图像名称ConsoleApp1.exe *32
的进程选项卡上的进程,如下所示。这很有道理。
Start Without Debugging
选项运行应用程序时,我们看不到应用程序的可执行文件在任务管理器中启动。事实上,我们看到cmd.exe
正在推出,如下所示:现在,当我右键单击cmd.exe
任务并从上下文菜单中选择Go To Process
选项时,我将进入具有图像名称cmd.exe *32
的进程选项卡上的进程,如下所示。但还有更多。您还会看到ConsoleApp1.exe *32
在进程选项卡中运行,该选项卡在Applications
选项卡中不可见。
所以这就是所有点连接的方式,在Start Without Debugging
模式下,Visual Studio实际上启动了一个cmd.exe
实例,然后启动我们的应用程序ConsoleApp1.exe
。
当我按下回车的那一刻,ConsoleApp1.exe
进程被终止但是cmd.exe
进程继续存在,直到我按下另一个键,如下所示: