公司有一个控制台应用程序,在关闭控制台应用程序窗口前,想处理一下业务逻辑。还有比如误操作关闭了,或者像消息队列启动了发送消息提醒,那关闭了窗口代表控制台应用销毁了,也需要发送消息通知。那这个时候添加关闭窗口事件就派上用场了。
很多小伙伴问,有没有办法像WinForm一样,对窗体关闭退出事件进行控制呢?默认是没有的,我们可以自己写。按照下面的步骤来操作吧:
1、在【Program.cs】文件的Program类中写如下代码。 添加一个委托HandlerAppClose,就是把函数的指针传递给系统API函数SetConsoleCtrlHandler。
代码:
|
|
|
public delegate bool ControlCtrlDelegate(int CtrlType); |
|
[ ] |
|
private static extern bool SetConsoleCtrlHandler(ControlCtrlDelegate HandlerAppClose, bool Add); |
|
private static ControlCtrlDelegate cancelHandler = new ControlCtrlDelegate(HandlerAppClose); |
|
|
|
/// <summary> |
|
/// 关闭窗口时的事件 |
|
/// </summary> |
|
/// <param name="CtrlType"></param> |
|
/// <returns></returns> |
|
static bool HandlerAppClose(int CtrlType) |
|
{ |
|
Console.WriteLine("关闭窗口事件被激活"); |
|
Console.WriteLine("do something..."); |
|
return false; |
|
} |
|
|
|
|
2、然后在Program类的Main方法中去注册窗口关闭事件。
代码:
|
//注册窗口关闭事件 |
|
bool bRet = SetConsoleCtrlHandler(cancelHandler, true); |
3、效果如下,当点击【x】关闭窗口时,就会触发窗口关闭事件了。 会进入到这个事件里面:
原文链接:https://www.cnblogs.com/kimiliucn/p/17616757.html