diff --git a/v2rayN/v2rayN.Desktop/App.axaml.cs b/v2rayN/v2rayN.Desktop/App.axaml.cs index ce405661..898de4e8 100644 --- a/v2rayN/v2rayN.Desktop/App.axaml.cs +++ b/v2rayN/v2rayN.Desktop/App.axaml.cs @@ -69,11 +69,12 @@ public partial class App : Application } } - private void MenuExit_Click(object? sender, EventArgs e) + private async void MenuExit_Click(object? sender, EventArgs e) { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { - Locator.Current.GetService()?.MyAppExitAsync(false); + var service = Locator.Current.GetService(); + if (service != null) await service.MyAppExitAsync(false); desktop.Shutdown(); } diff --git a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs index 0825faff..4d4e67f7 100644 --- a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs @@ -10,7 +10,6 @@ using DialogHostAvalonia; using MsBox.Avalonia.Enums; using ReactiveUI; using Splat; -using System.ComponentModel; using System.Reactive.Disposables; using v2rayN.Desktop.Common; @@ -30,7 +29,6 @@ namespace v2rayN.Desktop.Views _config = AppHandler.Instance.Config; _manager = new WindowNotificationManager(TopLevel.GetTopLevel(this)) { MaxItems = 3, Position = NotificationPosition.BottomRight }; - this.Closing += MainWindow_Closing; this.KeyDown += MainWindow_KeyDown; menuSettingsSetUWP.Click += menuSettingsSetUWP_Click; menuPromotion.Click += menuPromotion_Click; @@ -274,10 +272,22 @@ namespace v2rayN.Desktop.Views } } - private void MainWindow_Closing(object? sender, CancelEventArgs e) + protected override async void OnClosing(WindowClosingEventArgs e) { - e.Cancel = true; - ShowHideWindow(false); + Logging.SaveLog("OnClosing -> " + e.CloseReason.ToString()); + + switch (e.CloseReason) + { + case WindowCloseReason.OwnerWindowClosing or WindowCloseReason.WindowClosing: + e.Cancel = true; + ShowHideWindow(false); + break; + case WindowCloseReason.ApplicationShutdown or WindowCloseReason.OSShutdown: + await ViewModel?.MyAppExitAsync(true); + break; + } + + base.OnClosing(e); } private async void MainWindow_KeyDown(object? sender, KeyEventArgs e) diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs index e9a18a73..0243fcff 100644 --- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -270,11 +270,11 @@ namespace v2rayN.Views StorageUI(); } - private void Current_SessionEnding(object sender, SessionEndingCancelEventArgs e) + private async void Current_SessionEnding(object sender, SessionEndingCancelEventArgs e) { Logging.SaveLog("Current_SessionEnding"); StorageUI(); - ViewModel?.MyAppExitAsync(true); + await ViewModel?.MyAppExitAsync(true); } private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) diff --git a/v2rayN/v2rayN/Views/StatusBarView.xaml.cs b/v2rayN/v2rayN/Views/StatusBarView.xaml.cs index d1234ff7..96b2ce58 100644 --- a/v2rayN/v2rayN/Views/StatusBarView.xaml.cs +++ b/v2rayN/v2rayN/Views/StatusBarView.xaml.cs @@ -100,11 +100,11 @@ namespace v2rayN.Views return await Task.FromResult(true); } - private void menuExit_Click(object sender, RoutedEventArgs e) + private async void menuExit_Click(object sender, RoutedEventArgs e) { tbNotify.Dispose(); var service = Locator.Current.GetService(); - if (service != null) service.MyAppExitAsync(false); + if (service != null) await service.MyAppExitAsync(false); } private void txtRunningInfoDisplay_MouseDoubleClick(object sender, MouseButtonEventArgs e)