From f768f979138e6896f8f1c8e2a340dd10d6317645 Mon Sep 17 00:00:00 2001 From: Andreas Date: Thu, 8 Jan 2026 09:38:56 +0100 Subject: [PATCH] Improved debug logging for `SetBusy` methods Fixed #329 --- .../Models/ViewModelBase.cs | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/SharedMauiCoreLibrary/Models/ViewModelBase.cs b/src/SharedMauiCoreLibrary/Models/ViewModelBase.cs index 918e96e..79ce4ae 100644 --- a/src/SharedMauiCoreLibrary/Models/ViewModelBase.cs +++ b/src/SharedMauiCoreLibrary/Models/ViewModelBase.cs @@ -1,4 +1,7 @@ using AndreasReitberger.Shared.Core.Interfaces; +#if DEBUG +using System.Diagnostics; +#endif namespace AndreasReitberger.Shared.Core { @@ -14,15 +17,24 @@ public partial class ViewModelBase : ViewModelCoreBase, IViewModelBase public ViewModelBase() : base() { Dispatcher = DispatcherProvider.Current.GetForCurrentThread(); +#if DEBUG + Debug.WriteLine($"[ViewModelBase] Default Ctor called: {Dispatcher}"); +#endif } public ViewModelBase(IDispatcher? dispatcher) : base() { Dispatcher = dispatcher; +#if DEBUG + Debug.WriteLine($"[ViewModelBase] Ctor with dispatcher parameter called: {Dispatcher}"); +#endif } public ViewModelBase(IDispatcher? dispatcher, IServiceProvider? provider) : base(provider: provider) { Dispatcher = dispatcher; Provider = provider; +#if DEBUG + Debug.WriteLine($"[ViewModelBase] Ctor with dispatcher and provider parameter called: {Dispatcher}, {Provider}"); +#endif } #endregion @@ -30,9 +42,13 @@ public ViewModelBase(IDispatcher? dispatcher, IServiceProvider? provider) : base #region Methods public void SetBusy(bool isBusy, IDispatcher? dispatcher) { + dispatcher ??= Dispatcher; // Only dispatch if needed - if (dispatcher is not null && dispatcher?.IsDispatchRequired is true) + if (dispatcher is not null && dispatcher.IsDispatchRequired is true) { +#if DEBUG + Debug.WriteLine($"[ViewModelBase] SetBusy dispatching on ThreadId: {Environment.CurrentManagedThreadId}"); +#endif dispatcher.Dispatch(() => { if (isBusy) @@ -44,6 +60,9 @@ public void SetBusy(bool isBusy, IDispatcher? dispatcher) // Update on the MainThread else { +#if DEBUG + Debug.WriteLine($"[ViewModelBase] SetBusy executing on MainThreadId: {Environment.CurrentManagedThreadId}"); +#endif if (isBusy) IsBusyCounter++; else @@ -55,9 +74,13 @@ public void SetBusy(bool isBusy, IDispatcher? dispatcher) public async Task SetBusyAsync(bool isBusy, IDispatcher? dispatcher) { + dispatcher ??= Dispatcher; // Only dispatch if needed - if (dispatcher is not null && dispatcher?.IsDispatchRequired is true) + if (dispatcher is not null && dispatcher.IsDispatchRequired) { +#if DEBUG + Debug.WriteLine($"[ViewModelBase] SetBusyAsync dispatching on ThreadId: {Environment.CurrentManagedThreadId}"); +#endif await dispatcher.DispatchAsync(() => { if (isBusy) @@ -69,6 +92,9 @@ await dispatcher.DispatchAsync(() => // Update on the MainThread else { +#if DEBUG + Debug.WriteLine($"[ViewModelBase] SetBusyAsync executing on MainThreadId: {Environment.CurrentManagedThreadId}"); +#endif if (isBusy) IsBusyCounter++; else