C# 为什么我的调试器跳过Console.ReadLine()?

C# 为什么我的调试器跳过Console.ReadLine()?,c#,debugging,C#,Debugging,所以,我已经调试了几个小时的程序,碰到了一个问题,这个问题现在似乎发生在其他地方,因为有一行代码没有正确执行 #if !DEBUG ServiceBase[] servicesToRun = new ServiceBase[] { new CommunicationManager() }; ServiceBase.Run(servicesToRun); #else CommunicationManager cm = new

所以,我已经调试了几个小时的程序,碰到了一个问题,这个问题现在似乎发生在其他地方,因为有一行代码没有正确执行

#if !DEBUG
            ServiceBase[] servicesToRun = new ServiceBase[] { new CommunicationManager() };
            ServiceBase.Run(servicesToRun);
#else
            CommunicationManager cm = new CommunicationManager();
            cm.StartService();
            Console.WriteLine("CommunicationService debug");
            string s = Console.ReadLine();
            cm.StopThreadsAndQueues();
#endif

它应该在控制台上停止。ReadLine()以保持调试窗口打开,直到按下一个键。但是由于
cm.StopThreadsAndQueues()代码被执行,不管程序最终是否死亡,即使我正在调试错误代码的线程仍在运行:P

如果你一步一步地检查代码,会发生什么情况?如果你在调试器中一步一步地检查代码,你能先确认它进入代码的第二部分吗(即您的调试符号正在按预期工作)并且它肯定没有运行
Console.ReadLine()
?它是否在它之前写入行?例如,您是否可以在它之后插入一个writeline,以确认它肯定会超过该行,而不是例如崩溃?执行该行后,s为空。您如何知道
ReadLine
调用没有等待?很可能有人正在写入您的输入流。您如何知道运行应用程序?看起来像服务的Main()方法。服务没有控制台。项目>属性>应用程序选项卡>输出类型>将其更改为控制台应用程序。足以进行调试,而不是实际作为服务运行。如果要同时执行这两项操作,则必须使用pinvoke alloconsole()。