C# 控制台程序会被鼠标单击暂停运行问题

发布于 2022-10-05  933 次阅读


最近在学习写控制台贪吃蛇,发现鼠标点击总是会造成控制台持续的异常,界面无法刷新渲染,处于暂停状态。

查询了原因是因为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;

这样一来,问题就能解决了!