一、背景
最近寫一個實時監控物品服務的控制台程序,發現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