2011-10-14 134 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

相關問題