Как использовать событие Application.Exit в WPF?

Мне нужно удалить некоторые определенные файлы, затем пользователь закрывает программу в WPF. Поэтому я попробовал код MDSN отсюда http://msdn.microsoft.com/en-us/library/system.windows.application.exit.aspx следующим образом:

этот код находится здесь App.xml.cs

public partial class App : Application
{
 void App_Exit(object sender, ExitEventArgs 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);
                }

    }

}

// App.xaml
<Application x:Class="ModernUIApp1.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.Resources>

Прежде всего, он не удаляет файлы, во-вторых, эта программа остается в процессе после нажатия кнопки выхода (это действительно странно). Этот код не дает никаких ошибок. И, наконец, он не показывает MessageBox Итак, что-то не так?

Я думаю, что он просто не может найти эту функцию.

Ответ 1

Это довольно просто:

Добавить свойство "Выход" в тег приложения

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

и обрабатывать его в "code behind"

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

Событие "Выход" запускается, когда приложение завершает работу или завершается сеанс Windows. Он запускается после события SessionEnding. Вы не можете отменить событие Exit.

Ответ 2

вы должны добавить app_exit в свой код xaml

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

вы можете просто подключить событие Закрытие в своем главном окне, как это -

 <Window Closing="Window_Closing">

И в вашем случае выполните всю необходимую работу

    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);
            }
}

Ответ 3

  • Убедитесь, что пространство имен (MyApp) соответствует "x: class= MyApp..."
  • В свойствах для <Application></Application> дважды щелкните текстовое поле рядом с "Выход".
  • Если вы получаете "Невозможно добавить обработчик событий", то перестройка проекта исправила его для меня.

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

Код за

using System.Windows;

namespace MyApp
{ 
   public partial class App : Application
   {
     private void Application_Exit(object sender, ExitEventArgs e)
     {
         //your code
     }
  }
}