Application.ApplicationExit 事件  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在应用程序即将关闭时发生。
public:
 static event EventHandler ^ ApplicationExit;
	public static event EventHandler ApplicationExit;
	public static event EventHandler? ApplicationExit;
	member this.ApplicationExit : EventHandler 
	Public Shared Custom Event ApplicationExit As EventHandler 
	事件类型
示例
下面的代码示例显示两个窗体,并在这两个窗体关闭时退出应用程序。 当应用程序启动和退出时,将记住每个窗体的位置。 此示例演示如何使用 ApplicationExit 事件来了解何时应将窗体位置保存到文件中,何时 FileStream 应关闭 。
类 MyApplicationContext 继承自 ApplicationContext 并跟踪每个窗体何时关闭,并在两者都关闭时退出当前线程。 类会记住每个窗体关闭时的位置。 
              ApplicationExit事件发生时, 类会将用户的每个 位置写入文件。 表单位置数据存储在标题 appdata.txt 为 的文件中,该文件是在由 UserAppDataPath确定的位置创建的。 方法 Main 调用 Application.Run(context) 以在给定 的情况下 ApplicationContext启动应用程序。
此代码摘自类概述中显示的 ApplicationContext 示例。 有关整个代码列表,请参阅 ApplicationContext 。
   MyApplicationContext()
   {
      _formCount = 0;
      
      // Handle the ApplicationExit event to know when the application is exiting.
      Application::ApplicationExit += gcnew EventHandler( this, &MyApplicationContext::OnApplicationExit );
      try
      {
         
         // Create a file that the application will store user specific data in.
         _userData = gcnew FileStream( String::Concat( Application::UserAppDataPath, "\\appdata.txt" ),FileMode::OpenOrCreate );
      }
      catch ( IOException^ e ) 
      {
         
         // Inform the user that an error occurred.
         MessageBox::Show( "An error occurred while attempting to show the application. The error is: {0}", dynamic_cast<String^>(e) );
         
         // Exit the current thread instead of showing the windows.
         ExitThread();
      }
      
      // Create both application forms and handle the Closed event
      // to know when both forms are closed.
      _form1 = gcnew AppForm1;
      _form1->Closed += gcnew EventHandler( this, &MyApplicationContext::OnFormClosed );
      _form1->Closing += gcnew CancelEventHandler( this, &MyApplicationContext::OnFormClosing );
      _formCount++;
      _form2 = gcnew AppForm2;
      _form2->Closed += gcnew EventHandler( this, &MyApplicationContext::OnFormClosed );
      _form2->Closing += gcnew CancelEventHandler( this, &MyApplicationContext::OnFormClosing );
      _formCount++;
      
      // Get the form positions based upon the user specific data.
      if ( ReadFormDataFromFile() )
      {
         
         // If the data was read from the file, set the form
         // positions manually.
         _form1->StartPosition = FormStartPosition::Manual;
         _form2->StartPosition = FormStartPosition::Manual;
         _form1->Bounds = _form1Position;
         _form2->Bounds = _form2Position;
      }
      
      // Show both forms.
      _form1->Show();
      _form2->Show();
   }
   void OnApplicationExit( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      
      // When the application is exiting, write the application data to the
      // user file and close it.
      WriteFormDataToFile();
      try
      {
         
         // Ignore any errors that might occur while closing the file handle.
         _userData->Close();
      }
      catch ( Exception^ ) 
      {
      }
   }
private:
private MyApplicationContext()
{
    _formCount = 0;
    // Handle the ApplicationExit event to know when the application is exiting.
    Application.ApplicationExit += new EventHandler(this.OnApplicationExit);
    try
    {
        // Create a file that the application will store user specific data in.
        _userData = new FileStream(Application.UserAppDataPath + "\\appdata.txt", FileMode.OpenOrCreate);
    }
    catch (IOException e)
    {
        // Inform the user that an error occurred.
        MessageBox.Show("An error occurred while attempting to show the application." +
                        "The error is:" + e.ToString());
        // Exit the current thread instead of showing the windows.
        ExitThread();
    }
    // Create both application forms and handle the Closed event
    // to know when both forms are closed.
    _form1 = new AppForm1();
    _form1.Closed += new EventHandler(OnFormClosed);
    _form1.Closing += new CancelEventHandler(OnFormClosing);
    _formCount++;
    _form2 = new AppForm2();
    _form2.Closed += new EventHandler(OnFormClosed);
    _form2.Closing += new CancelEventHandler(OnFormClosing);
    _formCount++;
    // Get the form positions based upon the user specific data.
    if (ReadFormDataFromFile())
    {
        // If the data was read from the file, set the form
        // positions manually.
        _form1.StartPosition = FormStartPosition.Manual;
        _form2.StartPosition = FormStartPosition.Manual;
        _form1.Bounds = _form1Position;
        _form2.Bounds = _form2Position;
    }
    // Show both forms.
    _form1.Show();
    _form2.Show();
}
private void OnApplicationExit(object sender, EventArgs e)
{
    // When the application is exiting, write the application data to the
    // user file and close it.
    WriteFormDataToFile();
    try
    {
        // Ignore any errors that might occur while closing the file handle.
        _userData.Close();
    }
    catch { }
}
Public Sub New()
    MyBase.New()
    _formCount = 0
    ' Handle the ApplicationExit event to know when the application is exiting.
    AddHandler Application.ApplicationExit, AddressOf OnApplicationExit
    Try
        ' Create a file that the application will store user specific data in.
        _userData = New FileStream(Application.UserAppDataPath + "\appdata.txt", FileMode.OpenOrCreate)
    Catch e As IOException
        ' Inform the user that an error occurred.
        MessageBox.Show("An error occurred while attempting to show the application." +
                        "The error is:" + e.ToString())
        ' Exit the current thread instead of showing the windows.
        ExitThread()
    End Try
    ' Create both application forms and handle the Closed event
    ' to know when both forms are closed.
    _form1 = New AppForm1()
    AddHandler _form1.Closed, AddressOf OnFormClosed
    AddHandler _form1.Closing, AddressOf OnFormClosing
    _formCount = _formCount + 1
    _form2 = New AppForm2()
    AddHandler _form2.Closed, AddressOf OnFormClosed
    AddHandler _form2.Closing, AddressOf OnFormClosing
    _formCount = _formCount + 1
    ' Get the form positions based upon the user specific data.
    If (ReadFormDataFromFile()) Then
        ' If the data was read from the file, set the form
        ' positions manually.
        _form1.StartPosition = FormStartPosition.Manual
        _form2.StartPosition = FormStartPosition.Manual
        _form1.Bounds = _form1Position
        _form2.Bounds = _form2Position
    End If
    ' Show both forms.
    _form1.Show()
    _form2.Show()
End Sub
Private Sub OnApplicationExit(ByVal sender As Object, ByVal e As EventArgs)
    ' When the application is exiting, write the application data to the
    ' user file and close it.
    WriteFormDataToFile()
    Try
        ' Ignore any errors that might occur while closing the file handle.
        _userData.Close()
    Catch
    End Try
End Sub
	注解
在应用程序停止运行之前,必须将事件处理程序附加到 ApplicationExit 事件,以执行未经处理的必要任务。 可以关闭此应用程序打开的文件,或释放垃圾回收未回收的对象。
由于这是静态事件,因此必须在事件处理程序本身中 ApplicationExit 分离附加到此事件的任何事件处理程序。 如果不分离这些处理程序,它们将保持附加到事件并继续消耗内存。