【发布时间】:2011-05-26 02:50:37
【问题描述】:
我有一个控制台程序,它具有像这样运行的不同组件:
void start() {
while(true){
DoSomething();
Thread.Sleep(1000*5);
}
}
我的主要入口点看起来像 [pseudo-ish code]
Thread.Start(Componenet1.Start);
Thread.Start(Componenet2.Start);
while(true){
Console.Writeline("running");
Thread.Sleep(1000*5);
}
任何地方都没有 Console.Reads。我的问题是有时应用程序运行良好,但随后停止,如果我按窗口上的任何键,它将再次开始工作。这种情况很少发生,但我将此程序部署在 100 多个 VM 上,并在自动化环境中 24/7 运行。
另外,在我的电脑上,我有一些 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();,看看它的行为是否相同 -
c# 代码中的答案似乎不起作用。以下接受的答案确实如此。
-
C# 代码对我不起作用。可以在这里找到一个可行的解决方案:stackoverflow.com/a/36720802/1999917
标签: c# automation console-application