From 409041f3f039388c5c38abc4c33601f72f95d836 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Wed, 14 Sep 2022 12:53:55 +0800 Subject: [PATCH] Fix #31 --- src/Snap.Hutao/Snap.Hutao/App.xaml.cs | 1 + .../Extension/ContentDialogExtensions.cs | 17 +++++++---------- .../Snap.Hutao/Core/Logging/LogEntryQueue.cs | 2 +- .../Threading}/TaskExtensions.cs | 15 ++++++++------- .../Snap.Hutao/Properties/launchSettings.json | 2 +- src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs | 1 - .../View/Page/AnnouncementContentPage.xaml.cs | 2 +- .../ViewModel/AchievementViewModel.cs | 7 +++---- .../Snap.Hutao/ViewModel/GachaLogViewModel.cs | 2 +- 9 files changed, 23 insertions(+), 26 deletions(-) rename src/Snap.Hutao/Snap.Hutao/{Extension => Core/Threading}/TaskExtensions.cs (86%) diff --git a/src/Snap.Hutao/Snap.Hutao/App.xaml.cs b/src/Snap.Hutao/Snap.Hutao/App.xaml.cs index b1ad7866..44188983 100644 --- a/src/Snap.Hutao/Snap.Hutao/App.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/App.xaml.cs @@ -5,6 +5,7 @@ using Microsoft.UI.Xaml; using Microsoft.Windows.AppLifecycle; using Snap.Hutao.Core.LifeCycle; using Snap.Hutao.Core.Logging; +using Snap.Hutao.Core.Threading; using Snap.Hutao.Extension; using Snap.Hutao.Service.Metadata; using System.Diagnostics; diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Extension/ContentDialogExtensions.cs b/src/Snap.Hutao/Snap.Hutao/Control/Extension/ContentDialogExtensions.cs index 473310e5..5dbe10a9 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Extension/ContentDialogExtensions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Extension/ContentDialogExtensions.cs @@ -6,7 +6,6 @@ using Microsoft.UI.Xaml.Controls; using Microsoft.Xaml.Interactivity; using Snap.Hutao.Control.Behavior; using Snap.Hutao.Core.Threading; -using Snap.Hutao.Extension; namespace Snap.Hutao.Control.Extension; @@ -33,20 +32,15 @@ internal static class ContentDialogExtensions /// 阻止用户交互 /// /// 对话框 - /// 切换到主线程 /// 用于恢复用户交互 - public static async ValueTask BlockAsync(this ContentDialog contentDialog, bool switchToMainThread = false) + public static async ValueTask BlockAsync(this ContentDialog contentDialog) { - if (switchToMainThread) - { - await ThreadHelper.SwitchToMainThreadAsync(); - } - + await ThreadHelper.SwitchToMainThreadAsync(); contentDialog.ShowAsync().AsTask().SafeForget(); return new ContentDialogHider(contentDialog); } - private struct ContentDialogHider : IDisposable + private struct ContentDialogHider : IAsyncDisposable { private readonly ContentDialog contentDialog; @@ -55,8 +49,11 @@ internal static class ContentDialogExtensions this.contentDialog = contentDialog; } - public void Dispose() + public async ValueTask DisposeAsync() { + await ThreadHelper.SwitchToMainThreadAsync(); + + // Hide() must be called on main thread. contentDialog.Hide(); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs b/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs index f9dfc1af..15b668ca 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs @@ -4,7 +4,7 @@ using Microsoft.EntityFrameworkCore; using Snap.Hutao.Context.Database; using Snap.Hutao.Context.FileSystem; -using Snap.Hutao.Extension; +using Snap.Hutao.Core.Threading; using System.Collections.Concurrent; using System.Diagnostics; diff --git a/src/Snap.Hutao/Snap.Hutao/Extension/TaskExtensions.cs b/src/Snap.Hutao/Snap.Hutao/Core/Threading/TaskExtensions.cs similarity index 86% rename from src/Snap.Hutao/Snap.Hutao/Extension/TaskExtensions.cs rename to src/Snap.Hutao/Snap.Hutao/Core/Threading/TaskExtensions.cs index 5660460e..55e119cb 100644 --- a/src/Snap.Hutao/Snap.Hutao/Extension/TaskExtensions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Threading/TaskExtensions.cs @@ -3,7 +3,7 @@ using Snap.Hutao.Core.Logging; -namespace Snap.Hutao.Extension; +namespace Snap.Hutao.Core.Threading; /// /// 任务扩展 @@ -22,8 +22,9 @@ public static class TaskExtensions { await task; } - catch + catch (System.Exception ex) { + System.Diagnostics.Debug.WriteLine(ex); } } @@ -42,7 +43,7 @@ public static class TaskExtensions { // Do nothing } - catch (Exception e) + catch (System.Exception e) { logger?.LogError(EventIds.TaskException, e, "{caller}:\r\n{exception}", nameof(SafeForget), e.GetBaseException()); } @@ -54,7 +55,7 @@ public static class TaskExtensions /// 任务 /// 日志器 /// 发生异常时调用 - public static async void SafeForget(this Task task, ILogger? logger = null, Action? onException = null) + public static async void SafeForget(this Task task, ILogger? logger = null, Action? onException = null) { try { @@ -64,7 +65,7 @@ public static class TaskExtensions { // Do nothing } - catch (Exception e) + catch (System.Exception e) { logger?.LogError(EventIds.TaskException, e, "{caller}:\r\n{exception}", nameof(SafeForget), e.GetBaseException()); onException?.Invoke(e); @@ -78,7 +79,7 @@ public static class TaskExtensions /// 日志器 /// 任务取消时调用 /// 发生异常时调用 - public static async void SafeForget(this Task task, ILogger? logger = null, Action? onCanceled = null, Action? onException = null) + public static async void SafeForget(this Task task, ILogger? logger = null, Action? onCanceled = null, Action? onException = null) { try { @@ -88,7 +89,7 @@ public static class TaskExtensions { onCanceled?.Invoke(); } - catch (Exception e) + catch (System.Exception e) { logger?.LogError(EventIds.TaskException, e, "{caller}:\r\n{exception}", nameof(SafeForget), e.GetBaseException()); onException?.Invoke(e); diff --git a/src/Snap.Hutao/Snap.Hutao/Properties/launchSettings.json b/src/Snap.Hutao/Snap.Hutao/Properties/launchSettings.json index dc55a580..b8b51163 100644 --- a/src/Snap.Hutao/Snap.Hutao/Properties/launchSettings.json +++ b/src/Snap.Hutao/Snap.Hutao/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "Snap.Hutao (Package)": { "commandName": "MsixPackage", - "nativeDebugging": false + "nativeDebugging": true }, "Snap.Hutao (Unpackaged)": { "commandName": "Project" diff --git a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs index d0f7f2b3..eb38f687 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml.cs @@ -5,7 +5,6 @@ using Microsoft.UI.Xaml.Controls; using Snap.Hutao.Core; using Snap.Hutao.Core.Logging; using Snap.Hutao.Core.Threading; -using Snap.Hutao.Extension; using Snap.Hutao.Service.Abstraction; using Snap.Hutao.Service.Navigation; using Snap.Hutao.View.Page; diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs index 5cf3e316..9a0850c9 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/AnnouncementContentPage.xaml.cs @@ -5,7 +5,7 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Navigation; using Microsoft.Web.WebView2.Core; using Snap.Hutao.Core; -using Snap.Hutao.Extension; +using Snap.Hutao.Core.Threading; using Snap.Hutao.Service.Navigation; using Windows.System; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/AchievementViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/AchievementViewModel.cs index e6f5dd47..eba53191 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/AchievementViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/AchievementViewModel.cs @@ -10,7 +10,6 @@ using Snap.Hutao.Control; using Snap.Hutao.Control.Extension; using Snap.Hutao.Core.Threading; using Snap.Hutao.Core.Threading.CodeAnalysis; -using Snap.Hutao.Extension; using Snap.Hutao.Factory.Abstraction; using Snap.Hutao.Message; using Snap.Hutao.Model.InterChange.Achievement; @@ -403,8 +402,8 @@ internal class AchievementViewModel string json; try { - Task task = Clipboard.GetContent().GetTextAsync().AsTask(); - json = await task.ConfigureAwait(false); + await ThreadHelper.SwitchToMainThreadAsync(); + json = await Clipboard.GetContent().GetTextAsync(); } catch (COMException ex) { @@ -465,7 +464,7 @@ internal class AchievementViewModel }; ImportResult result; - using (await importingDialog.InitializeWithWindow(mainWindow).BlockAsync().ConfigureAwait(false)) + await using (await importingDialog.InitializeWithWindow(mainWindow).BlockAsync().ConfigureAwait(false)) { result = await achievementService.ImportFromUIAFAsync(archive, uiaf.List, option).ConfigureAwait(false); } diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLogViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLogViewModel.cs index 99941c5a..5f844d14 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLogViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/GachaLogViewModel.cs @@ -123,7 +123,7 @@ internal class GachaLogViewModel : ObservableObject, ISupportCancellation private async Task RefreshByWebCacheAsync() { - Statistics = await gachaLogService.RefreshAsync(); + //Statistics = await gachaLogService.RefreshAsync(); } private async Task RefreshByManualInputAsync()