J'ai besoin de supprimer certains fichiers, puis l'utilisateur ferme le programme dans WPF. J'ai donc essayé le code MDSN d'ici http://msdn.Microsoft.com/en-us/library/system.windows.application.exit.aspx de cette façon:
ce code situé ici 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>
Tout d'abord, il ne supprime pas les fichiers, ensuite ce programme reste dans le processus après avoir appuyé sur le bouton de sortie (c'est vraiment étrange). Ce code ne donne aucune erreur. Et enfin, il ne montre pas MessageBox
Alors, quelque chose ne va pas ici?
Je pense qu'il ne trouve tout simplement pas cette fonction.
C'est assez simple:
Ajouter la propriété "Exit" à la balise d'application
<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>
et le gérer dans le "code derrière"
private void Application_Exit(object sender, ExitEventArgs e)
{
// Perform tasks at application exit
}
L'événement Exit est déclenché lorsque l'application s'arrête ou que la session Windows se termine. Il est déclenché après l'événement SessionEnding. Vous ne pouvez pas annuler l'événement Quitter.
vous devez ajouter app_exit dans votre code 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>
vous pouvez simplement accrocher l'événement Closing sur votre fenêtre principale comme ceci -
<Window Closing="Window_Closing">
Et dans votre événement, faites tout le travail dont vous avez besoin
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);
}
}
Si vous souhaitez suivre le principe MVVM, vous pouvez utiliser 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.
}
}
Cette approche est plus testable. Bonne journée.
<Application></Application>
, double-cliquez sur la zone de texte à côté de "Quitter".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 derrière
using System.Windows;
namespace MyApp
{
public partial class App : Application
{
private void Application_Exit(object sender, ExitEventArgs e)
{
//your code
}
}
}