尽管调用Console.ReadLine()和更多代码,C#控制台仍关闭

时间:2018-08-22 09:54:00

标签: c# command-line console.readline

以下代码导致控制台关闭(退出代码0,告诉我程序已完成)。奇怪的是:它甚至没有转到switch (choice)语句。调试器告诉我到达了Console.ReadLine()语句,但没有到达switch(choice)

请注意:

  • 输入数字(1或2)并按Enter键后,控制台关闭。
  • 我在switch语句上设置了断点,但断点没有到达这一行代码。我验证了使用调试器。在我按Enter键后立即关闭cmd。这似乎是到达的最后一行代码。
  • 我在程序的另一类中使用了这种菜单,没有任何问题。
  • 我正在从System.Threading.Timer调用此方法(PostTestMenu())

即使仍然有要执行的代码并且调试器清楚地指出甚至没有到达后续代码,为什么程序仍会停止?

protected void PostTestMenu ()
    {
        string choice;
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine(" ");
        Console.WriteLine("############## What next #############");
        Console.WriteLine("Repeat                               1");
        Console.WriteLine("Next                                 2");
        choice = Console.ReadLine();
        switch (choice)
        {
            case "1":
                Setup();
                break;
            case "2":
                program.Hauptmenue();
                break;
        }
    }

1 个答案:

答案 0 :(得分:0)

现在有了https://dotnetfiddle.net/CVRBfF的工作示例,您的问题很明显。启动程序时会发生什么?

  • 您的Main方法启动
  • Main实例化一个新的Program对象
  • 主机将计时器设置为在100毫秒后滴答
  • Main完成执行并退出
  • 退出Main后,程序执行完成,由于程序仍然退出,系统将丢弃程序的所有资源,包括待处理的计时器。

您的应用程序在100毫秒的间隔过去之前就退出了,因此您的PostTestMenu方法永远不会被调用。

如果您希望您的应用程序显示某些内容,则肯定需要花一些时间才能退出。最简单的方法是添加

Console.Readline();

到结束处}之前的Main()。