C#控制台程序 - 技巧合集

news/2024/12/22 9:51:29/

捕获控制台关闭事件

using BSServer.GameServer;
using log4net;
using System.Runtime.InteropServices;namespace BSServer
{internal class Program{#region 控制台关闭public delegate bool ControlCtrlDelegate(int CtrlType);[DllImport("kernel32.dll")]private static extern bool SetConsoleCtrlHandler(ControlCtrlDelegate HandlerRoutine, bool Add);private static ControlCtrlDelegate cancelHandler = new ControlCtrlDelegate(HandlerRoutine);#endregionstatic bool HandlerRoutine(int eventType){Loger.Info("系统关闭。eventType : " + eventType);return false;}static void Main(string[] args){new Loger("svr");SetConsoleCtrlHandler(cancelHandler, true);Loger.Info("系统启动。");Thread.Sleep(-1);Loger.Info("系统关闭。");}}
}

全局捕获报错

通过UnhandledException 来实现。

using BSServer.GameServer;
using log4net;
using System.Runtime.InteropServices;namespace BSServer
{internal class Program{static void Main(string[] args){new Loger("svr");Loger.Info("系统启动。");AppDomain currentDoamin = default(AppDomain);currentDoamin = AppDomain.CurrentDomain;currentDoamin.UnhandledException += GlobalUnhandledExceptionHandler;Thread.Sleep(-1);Loger.Info("系统关闭。");}private static void GlobalUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e){Exception ex = default(Exception);ex = (Exception)e.ExceptionObject;//ILog log = LogManager.GetLogger(typeof(Program));//log.Error(ex.Message + "\n" + ex.StackTrace);Loger.Error("错误:" + ex.Message + "\n" + ex.StackTrace);}}
}

控制台鼠标点击窗口程序会暂停运行的问题

通过关闭控制台程序的快速编辑功能来实现

using BSServer.GameServer;
using log4net;
using System.Runtime.InteropServices;namespace BSServer
{internal class Program{#region 关闭控制台程序的快速编辑//关闭 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);}#endregionstatic void Main(string[] args){new Loger("svr");DisbleQuickEditMode();Loger.Info("系统启动。");Thread.Sleep(-1);Loger.Info("系统关闭。");}}
}

http://www.ppmy.cn/news/1537498.html

相关文章

designer使用生成程序简单示例

文章目录 1.designer生成界面(1)菜单栏与状态栏(a)菜单栏(b)状态栏1).移除菜单栏2).移除菜单栏效果3).移除状态栏4).移除状态栏效果 (2)编辑界面 2.从ui文件转成py文件3.编写main文件运行程序 本章将以一个很简单的程序示例,展示一下designer.exe生成程序的方便快捷…

linux中缓存,在kafka上应用总结

linux中的缓存 页缓存 pagecatch(读缓存用于提供快速读)块缓存(用于提供其他设备快速写)当对读缓存读的时候,修改了读的数据,页缓存就会被标记为脏数据,等到写的时候它会向块缓存同步数据&…

大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!首先,嵌入式硬…

Maven 高级之分模块设计与继承、聚合

在软件开发中,随着项目规模的扩大,代码量和复杂度不断增加,传统的一体化开发模式逐渐暴露出诸多问题。为了解决这些问题,模块化开发应运而生,而 Maven 正是模块化开发的利器,它提供的继承和聚合机制为构建和…

产品经理内容分享(二):AI产品经理的入门路线图

引言 想象这样一个场景:早晨的阳光穿透窗帘,投射在新一代智能机器人上,它正静静等待着你的第一个命令开始全新的一天。这样的场景听起来像是科幻小说里的情节,但实际上,这正是AI产品经理们工作的成果。如果你对这样的…

如何从U盘恢复已删除的文件

丢失重要文件可能是一场噩梦,感觉就像你内心死了一样。但是,你在 U 盘中备份了重要数据,因此你不会担心丢失数据。现在,猜猜怎么了?你也丢失了 U 盘中的文件。它可能被错误删除,或者你在没有检查的情况下格…

PyQt入门指南八 多线程编程入门

在PyQt应用程序中,多线程编程是非常重要的,因为它可以防止GUI界面在执行耗时操作时冻结。Python的threading模块和PyQt的QThread类都可以用来实现多线程,但在PyQt中,推荐使用QThread,因为它更好地与Qt的事件循环集成。…

LLM prompt提示设计与优化

参看: https://help.aliyun.com/zh/model-studio/use-cases/prompt-engineering-guide?spma2c4g.11186623.0.0.136d55ceDnHbPK https://tenten.co/learning/co-star-tidd-ec-prompt-framework/ 大语言模型中 Prompt 的设计和优化方法,包括使用 Prompt 框…