From 66eb9b91e8fef3e2c26df059138ef77c37220d5f Mon Sep 17 00:00:00 2001 From: Moonbase Date: Thu, 27 Nov 2025 13:00:26 -0800 Subject: [PATCH] Rework Store Tab Updating --- qtc-net-client-2/Forms/Main.cs | 55 ++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/qtc-net-client-2/Forms/Main.cs b/qtc-net-client-2/Forms/Main.cs index 7668d64..7bf6b1c 100644 --- a/qtc-net-client-2/Forms/Main.cs +++ b/qtc-net-client-2/Forms/Main.cs @@ -22,7 +22,7 @@ namespace qtc_net_client_2 private IGatewayService _gatewayService; private Config _config; - private ServerConfig _serverConfig; + private ServerConfig? _serverConfig; private AudioService AudioService = new(); private ImageFactory _imgFactory = new(); private CredentialService _credService = new(); @@ -377,17 +377,60 @@ namespace qtc_net_client_2 { if (lvStoreItems.Items.Count == storeItems.Data.Count) return; - ilStoreThumbnails.Images.Clear(); - foreach (var item in storeItems.Data) + if (!IsHandleCreated || IsDisposed) + return; + + if (InvokeRequired) { - await GetAndAddStoreThumbnail(item); - var lvitem = lvStoreItems.Items.Add(new ListViewItem { Text = item.Name, Name = item.Id.ToString() }); - lvitem.ImageKey = item.Id.ToString(); + Invoke(() => ApplyStoreItems(storeItems.Data)); + } + else + { + ApplyStoreItems(storeItems.Data); } } } } + private async void ApplyStoreItems(IEnumerable storeItems) + { + ilStoreThumbnails.Images.Clear(); + lvStoreItems.Items.Clear(); + + var items = await BuildListViewItemsAsync(storeItems); + + lvStoreItems.BeginUpdate(); + try + { + lvStoreItems.Items.AddRange([.. items]); + } + finally + { + lvStoreItems.EndUpdate(); + } + } + + private async Task> BuildListViewItemsAsync(IEnumerable storeItems) + { + var items = new List(); + + foreach (var item in storeItems) + { + await GetAndAddStoreThumbnail(item); + + var lvItem = new ListViewItem + { + Text = item.Name, + Name = item.Id.ToString(), + ImageKey = item.Id.ToString() + }; + + items.Add(lvItem); + } + + return items; + } + private async void lvStoreItems_DoubleClick(object sender, EventArgs e) { if (lvStoreItems.SelectedItems.Count > 0)