我有一个winforms程序,它有一个“退出”按钮,可以触发执行清理的事件,然后触发Application.Exit();
以退出程序。
但由于程序是一个托盘应用程序,我经常忘记使用此退出按钮关闭程序,而只是按下Windows关闭。如果我这样做,事件就不会被调用,因此不会清理。
我的问题是:在使用不同的关闭方法时,我可以指望一个事件,比如关闭窗口吗?
我看到我可以覆盖OnClosing
- 但这是正确的方法吗?
修改
所有答案都有效。但我最终以:
结束了Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
答案 0 :(得分:4)
我想你可以用这个:
void Init()
{
SystemEvents.SessionEnding +=
new SessionEndingEventHandler(SystemEvents_SessionEnding);
}
void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
// Do what you need
}
要阅读的gool链接可以是this
<强>编辑:强> 此解决方案甚至可以在非表单应用程序(控制台,服务等)中使用。
答案 1 :(得分:3)
是的,找到覆盖OnClosing事件的不同关闭方法将起作用。请看下面的代码部分。
protected override void OnFormClosing(FormClosingEventArgs e)
{
try
{
ConfirmClose = true;
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown)
{
//Do some action
}
}
}
catch (Exception ex)
{
}
}