我有一个控制台程序,其中有不同的组件以以下方式运行:
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。我的问题是有时应用程序表现良好,但会突然停止,如果我在窗口上按任何键,它就会重新开始工作。虽然这种情况不太频繁,但我已将此程序部署在运行24/7的100多个VM上的自动化环境中。
另外,在电脑上我有一些AHK脚本和其他操作鼠标的东西,但不确定是否与此有关。
还要注意,有时机器的CPU利用率可能真的达到了100%,因此可能线程优先级是一个问题?
解决方案:您需要禁用快速编辑模式。以下是可行的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);
DoSomething();
并查看它是否表现相同。 - Andrey