App.Current.Shutdown()は非同期で動作します。これは、このメソッドを呼び出すと、Shutdown() の呼び出しに続くコード行の実行から保護されないことを意味します。
問題は、App.Current.Shutdown() が呼び出されたスレッドをブロックする方法です。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
App.Current.Shutdown();
File.WriteAllText(@"..\log.txt", "Info");
}
}
private void App_OnExit(object sender, ExitEventArgs e) {
Thread.Sleep(3500);
}
File.WriteAll は新しいファイルを作成し、「Info」文字列を書き込みます。