2016-10-20 89 views
1

我試圖在程序被強制退出時保存一些數據。未引發ApplicationExit事件

例如,如果PC關機或被任務管理器關閉。

它不是控制檯或Winforms應用程序。這只是一個沒有用戶界面的後臺進程。

namespace Test 
{ 
    class Test 
    { 
     static void Main() 
     { 
      Application.ApplicationExit += new EventHandler(OnProcessExit); 
      //some stuff to do here 
     } 

     static void OnProcessExit(object sender, EventArgs e) 
     { 
      //saving all the important data 
      Console.WriteLine("Im out of here!"); 
      Environment.Exit(0); 
     } 
    } 
} 

這就是我試過的。我沒有任何錯誤,但我的處理程序沒有被調用。

回答

4

這裏至少有兩個問題。

Application.ApplicationExit事件只是提出當你叫Application.Run()Run()方法即將復出(例如你叫Application.Exit()Application.ExitThread(),或關閉的最後一個/主窗口等)。在您從未調用Application.Run()的非GUI程序中,Application對象沒有機會提升事件。

強行終止進程可以阻止更多的代碼執行,包括事件處理程序。對於非GUI進程,處理更合適的事件將是AppDomain.ProcessExit。但是,即使這個事件可能不會被提出,如果你強制終止你的過程。

因此,請嘗試AppDomain.ProcessExit事件。但請注意,取決於過程如何終止,即使可能不會提出。

如果你需要比這更具體的幫助,提供了良好的Minimal, Complete, and Verifiable code example,顯示你已經嘗試了什麼,再現您遇到任何問題,並在精確的解釋和具體細節代碼有什麼現在確切行爲你想要什麼。


補充閱讀:
How to run code before program exit?
C# Windows Program Exit Request (Detect Application.Exit) No Forms
How to detect when application terminates?

這些相關的帖子都沒有真正似乎充分涵蓋了「強制結束」的情況,因此在技術上不是你的問題的確切的重複,但他們確實提供了各種關於檢測你自己的進程退出的技術的良好討論。