Как использовать событие 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
}
}
}