【问题标题】:Windows Console Application Getting Stuck (Needs Key Press) [duplicate]Windows 控制台应用程序卡住(需要按键)[重复]
【发布时间】: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


【解决方案1】:

如果用户不小心点击了黑色的控制台窗口,光标会变为一个填充的白色矩形,并且应用程序会在下一个 Console.Write 语句处挂起,直到再次单击。

这是启用“快速编辑模式”时控制台窗口的通用功能。

要禁用该功能,您应该在运行时取消选中应用控制台窗口的“快速编辑模式”选项。

【讨论】:

  • aaaaaaah,我想我注意到光标发生了变化。我会在下次发生时尝试确认这一点。
  • @nextgenneo :如果是这样,您可以通过编程方式禁用它:bytes.com/topic/visual-basic-net/answers/…
  • 是的,太好了。确认这是问题所在!
  • @nextgenneo : 在之前的评论中添加了一个链接 :)
  • 有没有办法默认关闭它?
猜你喜欢
  • 2014-11-21
  • 2019-09-09
  • 2015-11-15
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多