環境
- .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(); }