yotiky Tech Blog

とあるエンジニアの備忘録

WPF - アプリ終了時に非同期処理を実行して終了する

環境

  • .NET Core 3.1

実装例

終了のイベントをフックして、非同期な後処理を呼びつつイベント自体はキャンセルし、後処理が終わったらそのままアプリが終了するようにします。

public MainWindow()
{
    Closing += MainWindow_Closing;
}

private bool isCalledQuit;
private bool isCleanuped;
private void MainWindow_Closing(object sender, CancelEventArgs e)
{
    if (isCleanuped) { return; }

    if (!isCalledQuit)
    {
        Quit();
    }
    e.Cancel = true;
}
private async void Quit()
{
    isCalledQuit = true;

    // 何か非同期な後処理

    isCleanuped = true;
    this.Close();
}