Win10中的控制台程序会被鼠标单击暂停运行的解决办法

一、背景

  最近写一个实时监控物品服务的控制台程序,发现win10系统中控制台程序会因为鼠标单击导致程序不继续执行,需要点击回车enter才能继续执行,有时会影响程序功能,在网上找到一些资料才发现是win10一个bug,网上有很多人遇到同样的问题。

二、原因

   Win10控制台程序打印输出信息过程中,如果使用鼠标左键点击控制台,则控制台进入“快速编辑模式”,此时会阻塞主线程,停止打印输出,此时点击鼠标右键或者按“Enter”键即可取消该模式。但是,取消后,控制台不在打印调试信息。

三、解决方法

1.第一种方法:

在实时监控物品服务的控制台程序,右键单击顶部白框,选择属性或默认值

去掉勾选"快速编辑模型",点击确定

 

 2. 第二种方法:

用C#关闭Console application的quick edit模式

复制代码
  #region 关闭Console application的quick edit模式
        //关闭 cmd 窗口默认为快速编辑(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();
         } 
复制代码

四、参考资料

C#关闭Console application的quick edit模式:https://blog.csdn.net/blizzardlyk/article/details/44810015

手动解决方法:https://blog.csdn.net/qingyang8513/article/details/88865955

 

posted @   笑笑未来  阅读(2389)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示