特定のファイルをいくつか削除する必要があります。その後、ユーザーは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>
まず第一に、それはファイルを削除しません。第二に、このプログラムはexitボタンを押した後もプロセスに残ります(これは本当に奇妙です)。このコードではエラーは発生しません。最後にMessageBox
が表示されないので、ここで何か問題がありますか?
彼はこの機能を見つけることができないと思う。
とても簡単です:
「終了」プロパティをアプリケーションタグに追加します
<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>
「コードビハインド」で処理します
private void Application_Exit(object sender, ExitEventArgs e)
{
// Perform tasks at application exit
}
アプリケーションがシャットダウンするか、Windowsセッションが終了すると、Exitイベントが発生します。 SessionEndingイベントの後に発生します。 Exitイベントをキャンセルすることはできません。
xamlコードにapp_exitを追加する必要があります
<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>
次のようにメインウィンドウでClosingイベントをフックすることができます-
<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);
}
}
MVVMの原則に従う場合は、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.
}
}
このアプローチはよりテスト可能です。ごきげんよう。
<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
}
}
}