背景
最近寫一個實時監(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