From c68596b91ecdf48381c769d05901dad56dfb9cdc Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Thu, 30 Apr 2026 15:04:54 +0800 Subject: [PATCH] =?UTF-8?q?improve:=E5=90=AF=E5=8A=A8=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/App.xaml.cs | 98 +++++++++++++------ Ink Canvas/MainWindow.xaml.cs | 62 +++++------- Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs | 4 +- 3 files changed, 95 insertions(+), 69 deletions(-) diff --git a/Ink Canvas/App.xaml.cs b/Ink Canvas/App.xaml.cs index 9f78632c..2f557443 100644 --- a/Ink Canvas/App.xaml.cs +++ b/Ink Canvas/App.xaml.cs @@ -85,6 +85,7 @@ namespace Ink_Canvas // 新增:启动画面相关 private static SplashScreen _splashScreen; private static bool _isSplashScreenShown = false; + private static System.Resources.ResourceSet _pendingLocalizedResourceSet; [DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)] private static extern int SetCurrentProcessExplicitAppUserModelID(string appId); @@ -763,20 +764,14 @@ namespace Ink_Canvas appStartTime = DateTime.Now; appStartupStartTime = DateTime.Now; - var resourceSet = Strings.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true); - if (resourceSet != null) - { - foreach (System.Collections.DictionaryEntry entry in resourceSet) - { - if (entry.Key is string key && entry.Value is string value) - Current.Resources[key] = value; - } - } + TryApplyPreferredLanguageFromSettings(); + + _pendingLocalizedResourceSet = Strings.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true); // 根据设置决定是否显示启动画面 if (ShouldShowSplashScreen() && !IsLaunchByFileOrUri(e.Args)) { - await Task.Delay(200); + await Task.Delay(100); ShowSplashScreen(); SetSplashMessage(Strings.GetString("Splash_Starting")); SetSplashProgress(20); @@ -785,7 +780,7 @@ namespace Ink_Canvas Application.Current.Dispatcher.Invoke(() => { }, DispatcherPriority.Render); } - await Task.Delay(200); + await Task.Delay(100); RootPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; LogHelper.NewLog(string.Format("Ink Canvas Starting (Version: {0})", Assembly.GetExecutingAssembly().GetName().Version)); @@ -821,15 +816,6 @@ namespace Ink_Canvas { SetSplashMessage("正在初始化组件..."); SetSplashProgress(40); - await Task.Delay(200); - } - try - { - IACoreDllExtractor.ExtractIACoreDlls(); - } - catch (Exception ex) - { - LogHelper.WriteLogToFile($"释放IACore DLL时出错: {ex.Message}", LogHelper.LogType.Error); } // 释放UIAccess DLL @@ -838,21 +824,13 @@ namespace Ink_Canvas SetSplashMessage("正在初始化组件..."); SetSplashProgress(50); } - try - { - UIAccessDllExtractor.ExtractUIAccessDlls(); - } - catch (Exception ex) - { - LogHelper.WriteLogToFile($"释放UIAccess DLL时出错: {ex.Message}", LogHelper.LogType.Error); - } // 记录应用启动(设备标识符) if (_isSplashScreenShown) { SetSplashMessage("正在加载配置..."); SetSplashProgress(60); - await Task.Delay(200); + await Task.Delay(100); } DeviceIdentifier.RecordAppLaunch(); try @@ -1137,7 +1115,6 @@ namespace Ink_Canvas } _taskbar = (TaskbarIcon)FindResource("TaskbarTrayIcon"); - _taskbar.ForceCreate(); StartArgs = e.Args; @@ -1209,6 +1186,19 @@ namespace Ink_Canvas }; mainWindow.Show(); + _ = Task.Run(async () => + { + await Task.Delay(600); + Dispatcher.Invoke(() => _taskbar?.ForceCreate()); + }); + Dispatcher.BeginInvoke(new Action(() => + { + if (_pendingLocalizedResourceSet != null) + { + LoadLocalizedResources(_pendingLocalizedResourceSet); + _pendingLocalizedResourceSet = null; + } + }), DispatcherPriority.ApplicationIdle); // 处理启动时的URI参数 string startupUriArg = e.Args.FirstOrDefault(a => a.StartsWith("icc:", StringComparison.OrdinalIgnoreCase)); @@ -1235,6 +1225,24 @@ namespace Ink_Canvas { await Task.Delay(1200); + try + { + IACoreDllExtractor.ExtractIACoreDlls(); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"释放IACore DLL时出错: {ex.Message}", LogHelper.LogType.Error); + } + + try + { + UIAccessDllExtractor.ExtractUIAccessDlls(); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"释放UIAccess DLL时出错: {ex.Message}", LogHelper.LogType.Error); + } + try { LogHelper.WriteLogToFile("开始注册.icstk文件关联"); @@ -1283,6 +1291,36 @@ namespace Ink_Canvas } } + private void TryApplyPreferredLanguageFromSettings() + { + try + { + var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs", "Settings.json"); + if (!File.Exists(settingsPath)) return; + + var json = File.ReadAllText(settingsPath); + dynamic obj = JsonConvert.DeserializeObject(json); + string preferredLanguage = obj?["appearance"]?["language"]?.ToString(); + if (!string.IsNullOrWhiteSpace(preferredLanguage)) + { + LocalizationHelper.TrySetCulture(preferredLanguage); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"启动时预加载语言失败: {ex.Message}", LogHelper.LogType.Error); + } + } + + private void LoadLocalizedResources(System.Resources.ResourceSet resourceSet) + { + foreach (System.Collections.DictionaryEntry entry in resourceSet) + { + if (entry.Key is string key && entry.Value is string value) + Current.Resources[key] = value; + } + } + private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { try diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index 45719c36..4c6a3294 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -96,25 +96,6 @@ namespace Ink_Canvas 处于画板模式内:Topmost == false / currentMode != 0 处于 PPT 放映内:BtnPPTSlideShowEnd.Visibility */ - try - { - var path = App.RootPath + settingsFileName; - if (File.Exists(path)) - { - var json = File.ReadAllText(path); - var loadedSettings = JsonConvert.DeserializeObject(json); - var preferredLanguage = loadedSettings?.Appearance?.Language; - if (!string.IsNullOrWhiteSpace(preferredLanguage)) - { - LocalizationHelper.TrySetCulture(preferredLanguage); - } - } - } - catch (Exception ex) - { - LogHelper.WriteLogToFile($"启动时预加载语言失败: {ex.Message}", LogHelper.LogType.Error); - } - InitializeComponent(); BlackboardLeftSide.Visibility = Visibility.Collapsed; @@ -337,9 +318,6 @@ namespace Ink_Canvas Activated += Window_Activated; Deactivated += Window_Deactivated; - // 为滑块控件添加触摸事件支持 - AddTouchSupportToSliders(); - // 初始化计时器控件事件 Dispatcher.BeginInvoke(new Action(() => { @@ -1191,6 +1169,7 @@ namespace Ink_Canvas private bool _suppressChickenSoupSourceSelectionChanged; private bool forcePointEraser; private bool _pendingStartupAutoUpdateCheck; + private bool _sliderTouchSupportInitialized; /// /// 在窗口加载完成后初始化应用的核心子系统、UI 状态和运行时监控组件。 @@ -1237,7 +1216,10 @@ namespace Ink_Canvas } //TextBlockVersion.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - LogHelper.WriteLogToFile("Ink Canvas Loaded", LogHelper.LogType.Event); + Dispatcher.BeginInvoke(new Action(() => + { + LogHelper.WriteLogToFile("Ink Canvas Loaded", LogHelper.LogType.Event); + }), DispatcherPriority.ApplicationIdle); isLoaded = true; EnsureRealtimeStylusPipelineBinding(); @@ -1317,17 +1299,11 @@ namespace Ink_Canvas _ = RunDeferredStartupPhaseBAsync(); - // 初始化剪贴板监控 - InitializeClipboardMonitoring(); - - // 初始化悬浮窗拦截管理器 - InitializeFloatingWindowInterceptor(); - - // 初始化全局快捷键管理器 - InitializeGlobalHotkeyManager(); - // 初始化墨迹渐隐管理器 - InitializeInkFadeManager(); + Dispatcher.BeginInvoke(new Action(() => + { + InitializeInkFadeManager(); + }), DispatcherPriority.ApplicationIdle); // 处理命令行参数中的文件路径 HandleCommandLineFileOpen(); @@ -1426,7 +1402,12 @@ namespace Ink_Canvas }; } }), DispatcherPriority.Loaded); - AddTouchSupportToSliders(); + Dispatcher.BeginInvoke(new Action(() => + { + if (_sliderTouchSupportInitialized) return; + AddTouchSupportToSliders(); + _sliderTouchSupportInitialized = true; + }), DispatcherPriority.ApplicationIdle); } private void ApplyLanguageFromSettings() @@ -2412,6 +2393,10 @@ namespace Ink_Canvas LogHelper.WriteLogToFile($"[MainWindow] 初始化上传队列时出错: {ex.Message}", LogHelper.LogType.Error); } + InitializeClipboardMonitoring(); + InitializeFloatingWindowInterceptor(); + InitializeGlobalHotkeyManager(); + try { string savePath = Settings.Automation.AutoSavedStrokesLocation; @@ -2473,9 +2458,12 @@ namespace Ink_Canvas if (_pendingStartupAutoUpdateCheck && Settings.Startup?.IsAutoUpdate == true) { _pendingStartupAutoUpdateCheck = false; - await Task.Delay(5000); - LogHelper.WriteLogToFile("AutoUpdate | Running deferred auto-update check after startup"); - AutoUpdate(); + await Task.Delay(3000); + Dispatcher.BeginInvoke(new Action(() => + { + LogHelper.WriteLogToFile("AutoUpdate | Running deferred auto-update check at UI idle"); + AutoUpdate(); + }), DispatcherPriority.ApplicationIdle); } } diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index a2ffd31c..8c4620c9 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -649,7 +649,7 @@ namespace Ink_Canvas ScheduleBrushAutoRestore(); } - LogHelper.WriteLogToFile("画笔自动恢复设置已加载", LogHelper.LogType.Event); + LogHelper.WriteLogToFile("画笔自动恢复设置已加载", LogHelper.LogType.Trace); } catch (Exception ex) { @@ -691,7 +691,7 @@ namespace Ink_Canvas // 根据设置更新墨迹渐隐控制开关的可见性 UpdateInkFadeControlVisibility(); - LogHelper.WriteLogToFile("墨迹渐隐设置已加载", LogHelper.LogType.Event); + LogHelper.WriteLogToFile("墨迹渐隐设置已加载", LogHelper.LogType.Trace); } catch (Exception ex) {