2011-10-14 135 views
3

我有一个winforms程序,它具有一个“退出”按钮,它会触发一个事件,执行清理操作,然后激发Application.Exit();退出程序。在Windows关闭应用程序退出

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

我的问题是:当使用不同的关闭方法,如Windows关机时,我可以指望的事件吗?

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

编辑:

所有答案没有工作。但我最终结束了与:

Application.ApplicationExit += new EventHandler(Application_ApplicationExit); 

回答

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

      } 
     } 
4

我认为你可以这样做:

void Init() 
{ 
    SystemEvents.SessionEnding += 
     new SessionEndingEventHandler(SystemEvents_SessionEnding); 
} 

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{ 
    // Do what you need 
} 

一个GOOL链接来阅读可能是this

编辑: 此解决方案的工作原理,甚至在非表单应用程序(控制台,服务等)中。

+1

@meep:看看我编辑过的帖子 – Marco

相关问题