“按任意键继续...”消息显示在“无需调试启动”模式中

问题描述 投票:3回答:3

我在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键后,它会在控制台上显示一条额外的消息:

按任意键继续...

enter image description here

然后我要按键盘上的另一个键来终止程序。这个神奇的信息从哪里来,为什么只在Start Without Debugging选项中显示?

注意:项目的构建后事件命令行是完全空的。

c# visual-studio visual-studio-2017 console-application
3个回答
5
投票

这就是visual studio如何运行不在调试模式下的控制台程序。据我所知,它无法控制。因为它显示它实际上是一个cmd.exe实例而不仅仅是一个控制台窗口我假设VS在命令行上使用/ K标志(我以为它使用了批处理文件,但现在看到没有必要)。

这是针对控制台程序运行并且简单退出的典型情况,没有该消息,这样的程序将不会给出任何查看输出的机会。


0
投票

这是C#控制台应用程序的默认行为。根据你的代码,你写的主要功能Console.ReadLine(); 接受用户的按键操作。在此之前它保持屏幕显示按任意键继续。大多数情况下,命令Console.ReadLine()用于读取应用程序的用户输入。您可以在哪里直接将用户输入的值分配给您输入的变量。


0
投票

我能够在他的回答中验证@SoronelHaetir分享的信息。我借助一些截图来详细说明这些内容,这些截图将补充他帖子中的信息并帮助您更好地理解相同内容:

  1. 当我通过按F5使用默认的Start Debugging选项运行应用程序时,我们可以看到应用程序的可执行文件在任务管理器中启动:

enter image description here

当我右键单击任务并从上下文菜单中选择Go To Process选项时,我将进入具有图像名称ConsoleApp1.exe *32的进程选项卡上的进程,如下所示。这很有道理。

enter image description here

  1. 现在,当我按Ctrl + F5使用Start Without Debugging选项运行应用程序时,我们看不到应用程序的可执行文件在任务管理器中启动。事实上,我们看到cmd.exe正在推出,如下所示:

enter image description here

现在,当我右键单击cmd.exe任务并从上下文菜单中选择Go To Process选项时,我将进入具有图像名称cmd.exe *32的进程选项卡上的进程,如下所示。但还有更多。您还会看到ConsoleApp1.exe *32在进程选项卡中运行,该选项卡在Applications选项卡中不可见。

enter image description here

所以这就是所有点连接的方式,在Start Without Debugging模式下,Visual Studio实际上启动了一个cmd.exe实例,然后启动我们的应用程序ConsoleApp1.exe

当我按下回车的那一刻,ConsoleApp1.exe进程被终止但是cmd.exe进程继续存在,直到我按下另一个键,如下所示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.