最近在学习写控制台贪吃蛇,发现鼠标点击总是会造成控制台持续的异常,界面无法刷新渲染,处于暂停状态。
查询了原因是因为Win10控制台程序打印输出信息过程中,使用鼠标左键点击控制台,控制台会进入“快速编辑模式”,会阻塞主线程,停止打印的输出,如果再点击鼠标右键或者按“Enter”键即可取消该模式。但是,取消后,控制台不在打印调试信息了。
解决方案
第一种方案,需要客户端设置。

第二种方案,也是我目前所使用的,通过代码来关闭。
关闭Console application的quick edit模式
region 关闭Console application的quick edit模式
//关闭 快速编辑(quickedit),解决鼠标点击暂停运行
const int STD_INPUT_HANDLE = -10;
const uint ENABLE_QUICK_EDIT_MODE = 0x0040;
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern IntPtr GetStdHandle(int hConsoleHandle);
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint mode);
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint mode);
public static void DisbleQuickEditMode()
{
IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
uint mode;
GetConsoleMode(hStdin, out mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin, mode);
}
#endregion
static void Main(string[] args)
{
DisbleQuickEditMode();
}
当然还需要引用这个包
using System.Runtime.InteropServices;
这样一来,问题就能解决了!
Comments | NOTHING