From beb36ff41acf368d3675917ff86bbba212b84e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Sun, 22 Mar 2026 01:50:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E9=81=AE=E7=BD=A9=E5=85=B3=E9=97=AD=E6=97=B6UI=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9C=AA=E6=AD=A3=E7=A1=AE=E9=87=8D=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20#2940?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当关闭地图遮罩功能时,确保所有挂起的计算任务被清理,并重置UI状态到初始值。同时修复了在配置禁用时UI状态未同步更新的问题。 --- .../GameTask/MapMask/MapMaskTrigger.cs | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/BetterGenshinImpact/GameTask/MapMask/MapMaskTrigger.cs b/BetterGenshinImpact/GameTask/MapMask/MapMaskTrigger.cs index d24d5ed3..f8eba132 100644 --- a/BetterGenshinImpact/GameTask/MapMask/MapMaskTrigger.cs +++ b/BetterGenshinImpact/GameTask/MapMask/MapMaskTrigger.cs @@ -87,14 +87,25 @@ public class MapMaskTrigger : ITaskTrigger // 关闭时隐藏UI if (!IsEnabled) { + var pendingBigMapCompute = Interlocked.Exchange(ref _pendingBigMapCompute, null); + pendingBigMapCompute?.Dispose(); + var pendingMiniMapCompute = Interlocked.Exchange(ref _pendingMiniMapCompute, null); + pendingMiniMapCompute?.Dispose(); + + Interlocked.Exchange(ref _pendingUiUpdate, null); + UIDispatcherHelper.BeginInvoke(() => { if (MaskWindow.InstanceNullable() != null) { - if (MaskWindow.Instance().DataContext is MaskWindowViewModel vm) + var window = MaskWindow.Instance(); + if (window.DataContext is MaskWindowViewModel vm) { vm.IsInBigMapUi = false; } + + window.PointsCanvasControl.UpdateViewport(0, 0, 0, 0); + window.MiniMapPointsCanvasControl.UpdateViewport(0, 0, 0, 0); } }); } @@ -396,6 +407,19 @@ public class MapMaskTrigger : ITaskTrigger if (update != null) { var window = MaskWindow.Instance(); + if (!_config.Enabled) + { + if (window.DataContext is MaskWindowViewModel vmWhenDisabled) + { + vmWhenDisabled.IsInBigMapUi = false; + } + + window.PointsCanvasControl.UpdateViewport(0, 0, 0, 0); + window.MiniMapPointsCanvasControl.UpdateViewport(0, 0, 0, 0); + Interlocked.Exchange(ref _uiApplyScheduled, 0); + return; + } + if (update.IsInBigMapUi is { } isInBigMapUi && window.DataContext is MaskWindowViewModel vm) { vm.IsInBigMapUi = isInBigMapUi;