Command Prompt中的QuickEdit模式如何以及为什么会冻结应用程序?

最近我遇到了一个Windows上的命令提示问题,QuickEdit模式已经启用,点击窗口select文本并挂起正在运行的程序。 这显然是已知的行为 – 我发现了一些与之相关的问题:

  • 命令行Windows挂在RDP Windows中
  • Windows控制台应用程序被卡住了
  • 如何禁用单个脚本的QuickEdit模式

应用程序如何“暂停”/“暂停”? 过程与* nix上的SIGSTOP信号相似吗? (我也有兴趣理解为什么这个function首先存在?这似乎是不直观和危险的。)

Solutions Collecting From Web of "Command Prompt中的QuickEdit模式如何以及为什么会冻结应用程序?"

这是非常设计。 当您的程序不断滚动控制台窗口的内容时,用户无法选择文本是不合理的。 所以控制台主机程序只是停止读取你的标准输出/标准输出,你的程序挂起,直到用户完成操作。 这可以改变,你必须调用Get + SetConsoleMode()并关闭ENABLE_QUICK_EDIT_MODE选项。

请注意,这个“挂起”与您的程序生成标准输出的速度远远高于控制台主机可以使用的执行暂停的速度并没有根本的区别。 虽然这些延迟是有限的。

而且这不是用户停止程序的唯一方法,他也可以简单地按下Ctrl + S。 按Ctrl + Q再次恢复。 如果你足够大,那么你可以将这些控制码识别为Xon / Xoff ,即终端的握手字符。 这就是控制台的真正用处,就是他们在20世纪70年代用过的一种简单的终端仿真。 这也可以改变,你将不得不停止依靠内置的缓冲控制台输入,并切换到ReadConsole() 。 或者通过关闭ENABLE_LINE_INPUT控制台选项,不太确定自从没有提到任何语言运行时间以来有什么副作用,您必须尝试。

当然,终止你的程序是很容易的。 当用户键入Ctrl + Z时,你会在stdin上得到EOF,这应该结束你的程序。 无论您的程序在做什么,都可以通过Ctrl + C和Ctrl + Break实现即时终止。 您可以通过SetConsoleCtrlHandler()获取这些通知,但不能阻止它。

如果违约行为是危险的 ,会危及人的健康,那么我强烈建议你聘请顾问。 而不会知道是谁写的这个答案。

我有很多麻烦,我自己找出为什么我的C#应用​​程序有一段时间没有响应,直到我按下一个键! 对于任何需要编程禁用QuickEdit的人,请看这里 。