如何在C#控制台应用关闭时调用Sparx EA实例关闭方法?
解决控制台关闭时调用EA实例关闭方法的问题
要搞定控制台应用关闭时自动调用CloseEAInstance的需求,我们需要监听控制台的退出事件,覆盖用户按Ctrl+C、程序正常结束、控制台窗口被关闭这些常见场景,下面是具体的实现步骤:
1. 注册退出事件
在你的Main方法开头,先注册两个关键的退出事件,确保任何终止场景都能触发清理逻辑:
static void Main(string[] args) { // 注册Ctrl+C/终止键的捕获事件 Console.CancelKeyPress += OnConsoleCancel; // 注册进程退出的全局事件 AppDomain.CurrentDomain.ProcessExit += OnProcessExit; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { //Application.Run(new PullPackageForm()); Application.Run(new StarterForm()); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadKey(); }
2. 编写事件处理逻辑
添加对应的事件处理方法,在里面调用你的CloseEAInstance方法完成清理:
private static void OnConsoleCancel(object sender, ConsoleCancelEventArgs e) { // 告诉系统我们要自己处理退出,别直接强制终止 e.Cancel = true; // 执行EA实例关闭逻辑 EAApi.CloseEAInstance(); // 手动退出程序 Environment.Exit(0); } private static void OnProcessExit(object sender, EventArgs e) { // 进程退出时执行EA清理 EAApi.CloseEAInstance(); }
3. 额外注意点
- 从你的代码看
EAApi.CloseEAInstance已经是静态方法,直接调用没问题;如果不是的话,要确保能正确访问到实例 - 如果你在WinForms窗口关闭时已经调用过
CloseEAInstance,可以加个布尔标记(比如private static bool _isEAClosed = false;),在调用前检查,避免重复执行清理逻辑导致报错 OnConsoleCancel里设置e.Cancel = true很重要,这样系统不会直接终止进程,给我们的清理代码留足执行时间
这样不管用户是关闭WinForms界面、按下Ctrl+C终止程序,还是直接关掉控制台窗口,EA实例都能被正确关闭啦。
内容的提问来源于stack exchange,提问作者Adil k.
相关产品推荐
相关产品推荐

