Windows控制台应用程序陷入困境(需要按键)

我有一个控制台程序,其中包含不同的组件,运行方式如下:

void start() { while(true){ DoSomething(); Thread.Sleep(1000*5); } } 

我的主要入口点看起来像[伪代码]

 Thread.Start(Componenet1.Start); Thread.Start(Componenet2.Start); while(true){ Console.Writeline("running"); Thread.Sleep(1000*5); } 

在任何地方都没有Console.Reads。 我的问题是SOMETIMES应用程序将运行良好,但然后停止,如果我按下窗口上的任何键它将再次开始工作。 这种情况很少发生,但我在100+ VM上部署了这个程序,在自动化环境中全天候运行。

另外在电脑上我有一些AHK脚本和其他操纵鼠标的东西但不确定它是否与它有任何关系。

另请注意,有时CPU可以在机器上以100%的速度运行,因此可能是线程优先级问题?

SOLUTION :您需要禁用快速编辑模式。 这是使用C#代码来执行此操作:

  // http://msdn.microsoft.com/en-us/library/ms686033(VS.85).aspx [DllImport("kernel32.dll")] public static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode); private const uint ENABLE_EXTENDED_FLAGS = 0x0080; static void Main(string[] args) { IntPtr handle = Process.GetCurrentProcess().MainWindowHandle; SetConsoleMode(handle, ENABLE_EXTENDED_FLAGS); 

如果用户意外地点击黑色控制台窗口,光标将变为填充的白色矩形,应用程序将在下一个Console.Write语句中挂起,直到另一个clic为止。

启用“QuickEdit模式”时,它是控制台窗口的通用function。

要禁用该function,您应该在运行时取消选中应用程序控制台窗口的“QuickEdit Mode”选项。