"按任意键继续......"消息显示在"启动时没有调试"模式

时间:2018-01-01 06:01:08

标签: c# visual-studio visual-studio-2017 console-application

我在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选项中显示?

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

    enter image description here

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

      现在,当我右键单击cmd.exe任务并从上下文菜单中选择Go To Process选项时,我将进入具有图像名称{{1}的流程选项卡上的流程} 如下所示。但还有更多。您还会在流程标签中看到cmd.exe *32正在ConsoleApp1.exe *32标签中显示。

      enter image description here

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

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

      enter image description here