From e2fc27663cf29bc23ba30ebb2548844afbf123a2 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Wed, 17 Sep 2025 20:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=97=E8=A1=A8=E6=AF=8F?= =?UTF-8?q?=E6=AC=A1=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=9E=8B=E5=9C=A8=E5=BC=80?= =?UTF-8?q?=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainWindow/SpineObjectListViewModel.cs | 57 ++++++++----------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs b/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs index b17bcda..cd9e22f 100644 --- a/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs @@ -463,7 +463,7 @@ namespace SpineViewer.ViewModels.MainWindow { if (ct.IsCancellationRequested) break; - var skelPath = paths[i]; + var skelPath = paths[totalCount - 1 - i]; // 从后往前添加, 每次插入到列表的第一个 reporter.ProgressText = $"[{i}/{totalCount}] {skelPath}"; if (AddSpineObject(skelPath)) @@ -486,7 +486,7 @@ namespace SpineViewer.ViewModels.MainWindow } /// - /// 安全地在末尾添加一个模型, 发生错误会输出日志 + /// 安全地在列表头添加一个模型, 发生错误会输出日志 /// /// 是否添加成功 private bool AddSpineObject(string skelPath, string? atlasPath = null) @@ -494,7 +494,7 @@ namespace SpineViewer.ViewModels.MainWindow try { var sp = new SpineObjectModel(skelPath, atlasPath); - lock (_spineObjectModels.Lock) _spineObjectModels.Add(sp); + lock (_spineObjectModels.Lock) _spineObjectModels.Insert(0, sp); if (Application.Current.Dispatcher.CheckAccess()) { RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Reset)); @@ -518,35 +518,6 @@ namespace SpineViewer.ViewModels.MainWindow return false; } - private bool AddSpineObject(SpineObjectWorkspaceConfigModel cfg) - { - try - { - var sp = new SpineObjectModel(cfg); - lock (_spineObjectModels.Lock) _spineObjectModels.Add(sp); - if (Application.Current.Dispatcher.CheckAccess()) - { - RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Reset)); - RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Add, sp)); - } - else - { - Application.Current.Dispatcher.Invoke(() => - { - RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Reset)); - RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Add, sp)); - }); - } - return true; - } - catch (Exception ex) - { - _logger.Trace(ex.ToString()); - _logger.Error("Failed to load: {0}, {1}", cfg.SkelPath, ex.Message); - } - return false; - } - public List LoadedSpineObjects { get @@ -609,7 +580,7 @@ namespace SpineViewer.ViewModels.MainWindow { if (ct.IsCancellationRequested) break; - var cfg = models[i]; + var cfg = models[totalCount - 1 - i]; // 从后往前添加, 每次插入到列表的第一个 reporter.ProgressText = $"[{i}/{totalCount}] {cfg}"; if (AddSpineObject(cfg)) @@ -637,5 +608,25 @@ namespace SpineViewer.ViewModels.MainWindow sp.ResetAnimationsTime(); } } + + /// + /// 安全地在列表头添加一个模型, 发生错误会输出日志 + /// + /// 是否添加成功 + private bool AddSpineObject(SpineObjectWorkspaceConfigModel cfg) + { + try + { + var sp = new SpineObjectModel(cfg); + lock (_spineObjectModels.Lock) _spineObjectModels.Insert(0, sp); + return true; + } + catch (Exception ex) + { + _logger.Trace(ex.ToString()); + _logger.Error("Failed to load: {0}, {1}", cfg.SkelPath, ex.Message); + } + return false; + } } }