Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

Application.Exit Event

Definition

Namespace:
System.Windows
Assembly:
PresentationFramework.dll

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Occurs just before an application shuts down and cannot be canceled.

public:
 event System::Windows::ExitEventHandler ^ Exit;
public event System.Windows.ExitEventHandler Exit;
member this.Exit : System.Windows.ExitEventHandler 
Public Custom Event Exit As ExitEventHandler 

Event Type

Examples

The following example demonstrates how to:

  • Handle the Exit event.

  • Inspect and update the ApplicationExitCode property of the ExitEventArgs.

  • Write an entry to an application log in isolated storage.

  • Persist the application state to isolated storage.

<Application x:Class="CSharp.App"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 StartupUri="MainWindow.xaml" 
 ShutdownMode="OnExplicitShutdown"
 Exit="App_Exit"
 >
</Application>
using System;
using System.Collections;
using System.Windows;
using System.IO;
using System.IO.IsolatedStorage;

namespace CSharp
{
 public enum ApplicationExitCode
 {
 Success = 0,
 Failure = 1,
 CantWriteToApplicationLog = 2,
 CantPersistApplicationState = 3
 }

 public partial class App : Application
 {
 void App_Exit(object sender, ExitEventArgs e)
 {
 try
 {
 // Write entry to application log
 if (e.ApplicationExitCode == (int)ApplicationExitCode.Success)
 {
 WriteApplicationLogEntry("Failure", e.ApplicationExitCode);
 }
 else
 {
 WriteApplicationLogEntry("Success", e.ApplicationExitCode);
 }
 }
 catch
 {
 // Update exit code to reflect failure to write to application log
 e.ApplicationExitCode = (int)ApplicationExitCode.CantWriteToApplicationLog;
 }

 // Persist application state
 try
 {
 PersistApplicationState();
 }
 catch
 {
 // Update exit code to reflect failure to persist application state
 e.ApplicationExitCode = (int)ApplicationExitCode.CantPersistApplicationState;
 }
 }

 void WriteApplicationLogEntry(string message, int exitCode)
 {
 // Write log entry to file in isolated storage for the user
 IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly();
 using (Stream stream = new IsolatedStorageFileStream("log.txt", FileMode.Append, FileAccess.Write, store))
 using (StreamWriter writer = new StreamWriter(stream))
 {
 string entry = string.Format("{0}: {1} - {2}", message, exitCode, DateTime.Now);
 writer.WriteLine(entry);
 }
 }

 void PersistApplicationState()
 {
 // Persist application state to file in isolated storage for the user
 IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly();
 using (Stream stream = new IsolatedStorageFileStream("state.txt", FileMode.Create, store))
 using (StreamWriter writer = new StreamWriter(stream))
 {
 foreach (DictionaryEntry entry in this.Properties)
 {
 writer.WriteLine(entry.Value);
 }
 }
 }
 }
}

Imports System.Collections
Imports System.Windows
Imports System.IO
Imports System.IO.IsolatedStorage

Namespace VisualBasic
 Public Enum ApplicationExitCode
 Success = 0
 Failure = 1
 CantWriteToApplicationLog = 2
 CantPersistApplicationState = 3
 End Enum

 Partial Public Class App
 Inherits Application
 Private Sub App_Exit(ByVal sender As Object, ByVal e As ExitEventArgs)
 Try
 ' Write entry to application log
 If e.ApplicationExitCode = CInt(ApplicationExitCode.Success) Then
 WriteApplicationLogEntry("Failure", e.ApplicationExitCode)
 Else
 WriteApplicationLogEntry("Success", e.ApplicationExitCode)
 End If
 Catch
 ' Update exit code to reflect failure to write to application log
 e.ApplicationExitCode = CInt(ApplicationExitCode.CantWriteToApplicationLog)
 End Try

 ' Persist application state
 Try
 PersistApplicationState()
 Catch
 ' Update exit code to reflect failure to persist application state
 e.ApplicationExitCode = CInt(ApplicationExitCode.CantPersistApplicationState)
 End Try
 End Sub

 Private Sub WriteApplicationLogEntry(ByVal message As String, ByVal exitCode As Integer)
 ' Write log entry to file in isolated storage for the user
 Dim store As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly()
 Using stream As Stream = New IsolatedStorageFileStream("log.txt", FileMode.Append, FileAccess.Write, store)
 Using writer As New StreamWriter(stream)
 Dim entry As String = String.Format("{0}: {1} - {2}", message, exitCode, Date.Now)
 writer.WriteLine(entry)
 End Using
 End Using
 End Sub

 Private Sub PersistApplicationState()
 ' Persist application state to file in isolated storage for the user
 Dim store As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly()
 Using stream As Stream = New IsolatedStorageFileStream("state.txt", FileMode.Create, store)
 Using writer As New StreamWriter(stream)
 For Each entry As DictionaryEntry In Me.Properties
 writer.WriteLine(entry.Value)
 Next entry
 End Using
 End Using
 End Sub
 End Class
End Namespace

Remarks

An application can shut down for either of the following reasons:

  • The Shutdown method of the Application object is called, either explicitly or as determined by the ShutdownMode property.

  • The user ends the session by logging off or shutting down.

You can detect when application shutdown occurs by handling the Exit event, and perform any additional processing as required.

You can also handle Exit to inspect or change the application exit code when you don't need to call Shutdown explicitly. The exit code is exposed from the ApplicationExitCode property of the ExitEventArgs argument that's passed to the Exit event handler. When the application stops running, the exit code is passed to the operating system for subsequent processing.

If your application handles the SessionEnding event and subsequently cancels it, Exit is not raised and the application continues running in accordance with the shutdown mode.

The exit code can be set from an XAML browser application (XBAP), although the value is ignored.

For XBAPs, Exit is raised in the following circumstances:

  • An XBAP is navigated away from.
  • When the browser tab that's hosting the XBAP is closed.
  • When the browser is closed.

In all cases, the value of the ApplicationExitCode property is ignored.

For more information about XBAP support, see Frequently asked questions about WPF browser-hosted applications (XBAP).

Applies to

See also


Feedback

Was this page helpful?