How to use Application.Exit Event in WPF?

后端 未结 5 750
没有蜡笔的小新
没有蜡笔的小新 2020-12-05 14:29

I need to delete some certain files, then user closes program in WPF. So I tried MDSN code from here http://msdn.microsoft.com/en-us/library/system.windows.application.exit.

相关标签:
5条回答
  • 2020-12-05 15:06

    If you don't like adding Exit event to XAML, you could try this alternative.

    Add following method to your App.xaml.cs:

    protected override void OnExit(ExitEventArgs e)
    {
        base.OnExit(e);
        // Your code here
    }
    
    0 讨论(0)
  • 2020-12-05 15:08

    you should add app_exit in your xaml code

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

    you can just hook the event Closing on your main window like this -

     <Window Closing="Window_Closing">
    

    And in your event do all the work you need

        private void Window_Closing(object sender, CancelEventArgs e)
    {
         MessageBox.Show("File deleted");
        var systemPath = System.Environment.GetFolderPath(
                                  Environment.SpecialFolder.CommonApplicationData);
    
                var _directoryName1 = Path.Combine(systemPath, "RadiolocationQ");
                var temp_file = Path.Combine(_directoryName1, "temp.ini");
    
                if (File.Exists(temp1_file))
                {
                    File.Delete(temp1_file);
                }
    }
    
    0 讨论(0)
  • 2020-12-05 15:12

    If you want to follow MVVM principle you can use System.Windows.Interactivity.WPF.

    MainWindow.xaml

    <Window x:Class="Endonext.View.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
    
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Closing">
            <i:InvokeCommandAction Command="{Binding WindowClosingCommand, Mode=OneTime}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    

    MainWindowViewModel.cs

    public class MainWindowViewModel 
    {
        ICommand WindowClosingCommand => new RelayCommand(arg => this.WindowClosing());
    
        private void WindowClosing()
        {
          // do what you want.
        }
    }
    

    This approach is more testable. Have a nice day.

    0 讨论(0)
  • 2020-12-05 15:13
    1. Make sure that the namespace (MyApp) matches "x:Class=MyApp..."
    2. Under properties for <Application></Application>, double click on the textbox next to 'Exit'.
    3. If you get "Unable to add event handler" then Rebuilding the project fixed it for me.

    XAML

    <Application x:Class="MyApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             Exit="Application_Exit"
    >
    

    Code behind

    using System.Windows;
    
    namespace MyApp
    { 
       public partial class App : Application
       {
         private void Application_Exit(object sender, ExitEventArgs e)
         {
             //your code
         }
      }
    }
    
    0 讨论(0)
  • 2020-12-05 15:22

    It's quite simple:

    Add "Exit" property to the application tag

    <Application x:Class="WpfApplication4.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MainWindow.xaml"
                 Exit="Application_Exit">
    </Application>
    

    and handle it in the "code behind"

    private void Application_Exit(object sender, ExitEventArgs e)
    {
        // Perform tasks at application exit
    }
    

    The Exit event is fired when the application is shutting down or the Windows session is ending. It is fired after the SessionEnding event. You cannot cancel the Exit event.

    0 讨论(0)
提交回复
热议问题