控制台应用程序在鼠标单击时冻结

我有一个非常简单的C#控制台应用程序,它显示一些文本和循环等待输入,直到按下转义键或提供超时时间。

using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; namespace SampleApp { public static class Program { public static void Main (string [] args) { var key = new ConsoleKeyInfo(); var watch = Stopwatch.StartNew(); var timeout = TimeSpan.FromSeconds(5); Console.WriteLine("Press escape to return to the previous screen..."); Console.WriteLine(); do { Console.WriteLine("This screen will automatically close in " + ((timeout + TimeSpan.FromSeconds(1)) - watch.Elapsed).ToString(@"hh\:mm\:ss") + "."); if (Console.KeyAvailable) { key = Console.ReadKey(true); } else { Thread.Sleep(TimeSpan.FromSeconds(0.10D)); } } while ((key.Key != ConsoleKey.Escape) && (timeout > (watch.Elapsed - TimeSpan.FromSeconds(0.5D)))); watch.Stop(); } } } 

这很好但如果我用鼠标点击控制台应用程序(例如获得焦点),屏幕上的所有活动都会冻结,直到我右键单击或按下转义。 在此期间,控制台的标题也会更改为"Select AppName"假设"AppName"是之前的标题。

如果我先右键单击控制台,请do {...} while (); 循环似乎疯了,打印了很多额外的行。

由于我不知道控制台的这种行为,不知道该问什么。 这是预期的吗? 如果是这样,我可以改变这种行为吗? 如果没有,任何建议的解决方法将不胜感激。

使用上述Hans的评论解决了这个问题。

听我说你以某种方式激活了控制台窗口的标记和粘贴命令。 通常通过系统菜单激活(Alt + Space,Edit,Mark / Paste)。 当然,这与此代码没有任何关系。

显然,出于某种原因,在控制台默认设置(Alt + Space,默认值,选项,编辑选项,快速编辑模式)中设置了快速编辑模式。 取消选中即可解决问题。