From 39e9f675d2000f414cb1a6e4579e81bc9835b2f8 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Tue, 26 Aug 2025 09:51:02 -0600 Subject: [PATCH] Fix possible race error on startup with autoscan --- Source/LibationAvalonia/ViewModels/MainVM.cs | 8 ++++++++ Source/LibationAvalonia/Views/MainWindow.axaml.cs | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/LibationAvalonia/ViewModels/MainVM.cs b/Source/LibationAvalonia/ViewModels/MainVM.cs index d369f064..809efb86 100644 --- a/Source/LibationAvalonia/ViewModels/MainVM.cs +++ b/Source/LibationAvalonia/ViewModels/MainVM.cs @@ -12,6 +12,7 @@ namespace LibationAvalonia.ViewModels { public partial class MainVM : ViewModelBase { + public Task? BindToGridTask { get; set; } public ProcessQueueViewModel ProcessQueue { get; } = new ProcessQueueViewModel(); public ProductsDisplayViewModel ProductsDisplay { get; } = new ProductsDisplayViewModel(); @@ -43,6 +44,13 @@ namespace LibationAvalonia.ViewModels { try { + //Prevent race condition which can occur if an auto-scan + //completes before the initial grid binding completes. + if (BindToGridTask is null) + return; + else if (BindToGridTask.IsCompleted is false) + await BindToGridTask; + await Task.WhenAll( SetBackupCountsAsync(fullLibrary), Task.Run(() => ProductsDisplay.UpdateGridAsync(fullLibrary))); diff --git a/Source/LibationAvalonia/Views/MainWindow.axaml.cs b/Source/LibationAvalonia/Views/MainWindow.axaml.cs index bf7c4853..d2347fa9 100644 --- a/Source/LibationAvalonia/Views/MainWindow.axaml.cs +++ b/Source/LibationAvalonia/Views/MainWindow.axaml.cs @@ -165,9 +165,10 @@ namespace LibationAvalonia.Views if (QuickFilters.UseDefault) await vm.PerformFilter(QuickFilters.Filters.FirstOrDefault()); - await Task.WhenAll( + ViewModel.BindToGridTask = Task.WhenAll( vm.SetBackupCountsAsync(initialLibrary), Task.Run(() => vm.ProductsDisplay.BindToGridAsync(initialLibrary))); + await ViewModel.BindToGridTask; } public void ProductsDisplay_LiberateClicked(object _, LibraryBook[] libraryBook) => ViewModel.LiberateClicked(libraryBook);