0

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

请注意:

  • 输入数字(1 或 2)并按 Enter 后,控制台关闭。
  • 我在 switch 语句上设置了断点,它没有到达这行代码。我使用调试器验证了这一点。它在我按下回车后立即关闭 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;
        }
    }
4

1 回答 1

0

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

  • 您的 Main 方法启动
  • Main 实例化一个新的 Program 对象
  • Main 设置一个计时器在 100 毫秒后滴答作响
  • Main 完成执行并退出
  • 退出 Main 后,程序执行完成,系统丢弃所有程序资源,包括挂起的计时器,因为程序已经退出。

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

如果你想让你的应用程序显示一些东西,你肯定需要在退出之前给它一些时间。最简单的方法是添加

Console.Readline();

到您的 Main(),就在结束 } 之前。

于 2018-08-22T11:52:17.377 回答