在Windows关闭时触发应用程序退出

时间:2011-10-14 07:45:37

标签: c# winforms

我有一个winforms程序,它有一个“退出”按钮,可以触发执行清理的事件,然后触发Application.Exit();以退出程序。

但由于程序是一个托盘应用程序,我经常忘记使用此退出按钮关闭程序,而只是按下Windows关闭。如果我这样做,事件就不会被调用,因此不会清理。

我的问题是:在使用不同的关闭方法时,我可以指望一个事件,比如关闭窗口吗?

我看到我可以覆盖OnClosing - 但这是正确的方法吗?

修改

所有答案都有效。但我最终以:

结束了
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);

2 个答案:

答案 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)
            {

            }
        }