自助网站系统,做h5页面的网站,公司旅游视频网站模板免费下载,深圳搜狗seo前言某控制台应用程序会随机卡死#xff0c;一直找不到原因。无意中在控制台敲了下回车#xff0c;发现程序居然恢复正常了。最后在stackoverflow上找到了这个帖子#xff1a;How and why does QuickEdit mode in Command Prompt freeze applications?[1]原来是“快速编辑模… 前言某控制台应用程序会随机卡死一直找不到原因。无意中在控制台敲了下回车发现程序居然恢复正常了。最后在stackoverflow上找到了这个帖子How and why does QuickEdit mode in Command Prompt freeze applications?[1]原来是“快速编辑模式”造成的。快速编辑模式快速编辑模式是Windows的一项功能它允许用户在命令提示符窗口中使用鼠标选择文本单击并在所需文本上拖动鼠标。默认情况下此功能是开启的不知是何原因应用程序所在控制台接收到了鼠标事件导致进入快速编辑模式等待我们确定选中文本而这时应用程序需要向控制台输出日志结果导致死锁。所以解决方案是关闭快速编辑模式。关闭快速编辑模式可以在“控制台窗口 属性”中设置默认值取消“快速编辑模式”选项。但是为了避免部署时疏漏使用代码自动禁用应用程序的快速编辑const uint ENABLE_QUICK_EDIT 0x0040;const int STD_INPUT_HANDLE -10;[DllImport(kernel32.dll, SetLastError true)]
static extern IntPtr GetStdHandle(int nStdHandle);[DllImport(kernel32.dll)]
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);[DllImport(kernel32.dll)]
static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);public static void Main(string[] args)
{IntPtr consoleHandle GetStdHandle(STD_INPUT_HANDLE);uint consoleMode;GetConsoleMode(consoleHandle, out consoleMode);consoleMode ~ENABLE_QUICK_EDIT;SetConsoleMode(consoleHandle, consoleMode);...
}关闭控制台日志在生产环境很少需要查看控制台日志。因此更好的方式是关闭控制台日志这样对程序性能也有一定好处。public static IHostBuilder CreateHostBuilder(string[] args) Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder {webBuilder.ConfigureLogging(config {//清空默认配置config.ClearProviders();//使用第三方log});webBuilder.UseStartupStartup();});结论本文的情况你可能永远不会碰到但是对于这种隐患建议你不要在生产环境使用控制台日志。如果你觉得这篇文章对你有所启发请关注我的个人公众号”My IO“记住我参考资料[1]How and why does QuickEdit mode in Command Prompt freeze applications?: https://stackoverflow.com/questions/30418886/how-and-why-does-quickedit-mode-in-command-prompt-freeze-applications