From 89f8dedb57c6dfea2180b882cf2881a76fe268cf Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Thu, 6 Jun 2024 13:11:24 +0800 Subject: [PATCH] fix url protocol launch lock --- .../Core/LifeCycle/AppActivation.cs | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/AppActivation.cs b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/AppActivation.cs index 588c061b..e0ede679 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/AppActivation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/AppActivation.cs @@ -56,30 +56,39 @@ internal sealed partial class AppActivation : IAppActivation, IAppActivationActi /// public void PostInitialization() { - serviceProvider.GetRequiredService().RunAsync().SafeForget(); - ToastNotificationManagerCompat.OnActivated += NotificationActivate; + RunPostInitializationAsync().SafeForget(); - using (activateSemaphore.Enter()) + async ValueTask RunPostInitializationAsync() { - // TODO: Introduced in 1.10.2, remove in later version - serviceProvider.GetRequiredService().ClearAsync().SafeForget(); - serviceProvider.GetRequiredService().UnregisterAllTasks(); + await taskContext.SwitchToBackgroundAsync(); - if (UnsafeLocalSetting.Get(SettingKeys.Major1Minor10Revision0GuideState, GuideState.Language) < GuideState.Completed) + serviceProvider.GetRequiredService().RunAsync().SafeForget(); + ToastNotificationManagerCompat.OnActivated += NotificationActivate; + + using (await activateSemaphore.EnterAsync().ConfigureAwait(false)) { - return; + // TODO: Introduced in 1.10.2, remove in later version + serviceProvider.GetRequiredService().ClearAsync().SafeForget(); + serviceProvider.GetRequiredService().UnregisterAllTasks(); + + if (UnsafeLocalSetting.Get(SettingKeys.Major1Minor10Revision0GuideState, GuideState.Language) < GuideState.Completed) + { + return; + } + + serviceProvider.GetRequiredService().RegisterAll(); + + if (serviceProvider.GetRequiredService().IsNotifyIconEnabled) + { + XamlLifetime.ApplicationLaunchedWithNotifyIcon = true; + + await taskContext.SwitchToMainThreadAsync(); + serviceProvider.GetRequiredService().DispatcherShutdownMode = DispatcherShutdownMode.OnExplicitShutdown; + _ = serviceProvider.GetRequiredService(); + } + + serviceProvider.GetRequiredService().StartAsync(default).SafeForget(); } - - serviceProvider.GetRequiredService().RegisterAll(); - - if (serviceProvider.GetRequiredService().IsNotifyIconEnabled) - { - XamlLifetime.ApplicationLaunchedWithNotifyIcon = true; - serviceProvider.GetRequiredService().DispatcherShutdownMode = DispatcherShutdownMode.OnExplicitShutdown; - _ = serviceProvider.GetRequiredService(); - } - - serviceProvider.GetRequiredService().StartAsync(default).SafeForget(); } } @@ -140,6 +149,8 @@ internal sealed partial class AppActivation : IAppActivation, IAppActivationActi private async ValueTask HandleActivationAsync(HutaoActivationArguments args) { + await taskContext.SwitchToBackgroundAsync(); + if (activateSemaphore.CurrentCount > 0) { using (await activateSemaphore.EnterAsync().ConfigureAwait(false))