Win10中的控制臺程序會被鼠標單擊暫停運行的解決辦法

背景

最近寫一個實時監(jiān)控物品服務的控制臺程序,發(fā)現(xiàn)win10系統(tǒng)中控制臺程序會因為鼠標單擊導致程序不繼續(xù)執(zhí)行,需要點擊回車enter才能繼續(xù)執(zhí)行,有時會影響程序功能,在網(wǎng)上找到一些資料才發(fā)現(xiàn)是win10一個bug,網(wǎng)上有很多人遇到同樣的問題。

原因

Win10控制臺程序打印輸出信息過程中,如果使用鼠標左鍵點擊控制臺,則控制臺進入“快速編輯模式”,此時會阻塞主線程,停止打印輸出,此時點擊鼠標右鍵或者按“Enter”鍵即可取消該模式。但是,取消后,控制臺不在打印調試信息。

解決方法

第一種方法:

在實時監(jiān)控物品服務的控制臺程序,右鍵單擊頂部白框,選擇屬性或默認值,

h_1.png

去掉勾選"快速編輯模型",點擊確定

h_2.png

第二種方法

用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

轉載:https://www.cnblogs.com/qy1234/p/12613887.html

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容