c# - 尽管有 Console.ReadLine() 调用和更多代码,但 C# 控制台关闭
问题描述
以下代码导致控制台关闭(退出代码 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;
}
}
解决方案
现在使用https://dotnetfiddle.net/CVRBfF上的工作示例,您的问题很明显。启动程序时会发生什么?
- 您的 Main 方法启动
- Main 实例化一个新的 Program 对象
- Main 设置一个计时器在 100 毫秒后滴答作响
- Main 完成执行并退出
- 退出 Main 后,程序执行完成,系统丢弃所有程序资源,包括挂起的计时器,因为程序已经退出。
您的应用程序在您的 100 毫秒间隔过去很久之前就退出了,因此您的 PostTestMenu 方法永远不会被调用。
如果你想让你的应用程序显示一些东西,你肯定需要在退出之前给它一些时间。最简单的方法是添加
Console.Readline();
到您的 Main(),就在结束 } 之前。
推荐阅读
- pandas-groupby - Pandas series.groupby().apply( .sum() ), .sum() 不求和值
- amazon-web-services - Jenkinsfile - 将 FilterPolicy 添加到 AWS SNS 订阅
- angular - HttpInterceptor - 解包 API 响应
- android - 使用或覆盖已弃用的 API android.support.design.widget.NavigationView
- c# - 在泛型类中使用 BinaryWriter
- ssl - 带有 HTTPS 的 NXLog:如何配置 SSL 和证书?
- uml - 活动图的数量
- javascript - MacOS 上的 Office 插件 getFileAsync。内部错误
- javascript - vuejs中基于propsdata测试多个案例
- google-drive-api - Google Drive API 不允许每天传输超过 2GB 的文件