From effc4be2b4b9fe457d55179bec0069a9e2f66465 Mon Sep 17 00:00:00 2001 From: LingkongSky Date: Thu, 4 Jun 2026 15:43:43 +0800 Subject: [PATCH] Fixed the issue about 'Object was deleted while awaiting a callback.' --- .../Core/RitsuModSettingsSubmenu.cs | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/Settings/ModSettingsUi/Core/RitsuModSettingsSubmenu.cs b/Settings/ModSettingsUi/Core/RitsuModSettingsSubmenu.cs index 5838b2c..c9e8ec9 100644 --- a/Settings/ModSettingsUi/Core/RitsuModSettingsSubmenu.cs +++ b/Settings/ModSettingsUi/Core/RitsuModSettingsSubmenu.cs @@ -234,7 +234,7 @@ public override void _Ready() _shellThemeChangedHandler = OnShellThemeChanged; RitsuShellThemeRuntime.ThemeChanged += _shellThemeChangedHandler; TryStartShellThemeWatcher(); - _ = WaitForInitialUiReadyAsync(); + ObserveBackgroundUiTask(WaitForInitialUiReadyAsync(), "initial_ui_ready"); RitsuShellTooltipTheme.ApplyToTreeRoot(this); ProcessMode = ProcessModeEnum.Disabled; FocusMode = FocusModeEnum.None; @@ -289,7 +289,7 @@ public override void OnSubmenuOpened() TryStartShellThemeWatcher(); if (!IsInitialUiReady) { - _ = EnsureOpenContentReadyAsync(); + ObserveBackgroundUiTask(EnsureOpenContentReadyAsync(), "open_content_ready"); return; } @@ -604,6 +604,27 @@ private void CancelPendingUiWork() cache.BuildCancellation?.Cancel(); } + private void ObserveBackgroundUiTask(Task task, string operation) + { + _ = ObserveBackgroundUiTaskAsync(task, operation); + } + + private static async Task ObserveBackgroundUiTaskAsync(Task task, string operation) + { + try + { + await task; + } + catch (OperationCanceledException) + { + // Normal when the submenu is closed or freed between deferred frame waits. + } + catch (Exception ex) + { + RitsuLibFramework.Logger.Warn($"[Settings] Background UI task '{operation}' failed: {ex.Message}"); + } + } + private void CallDeferredIfAlive(Action action) { var owner = this;