diff --git a/MapControl/Shared/TileImageLoader.cs b/MapControl/Shared/TileImageLoader.cs index 72fbaba7..caf770e8 100644 --- a/MapControl/Shared/TileImageLoader.cs +++ b/MapControl/Shared/TileImageLoader.cs @@ -110,26 +110,29 @@ namespace MapControl } } - private async Task LoadTilesFromQueue(TileSource tileSource, string cacheName, IProgress progress) + private bool TryDequeueTile(out Tile tile) { - while (true) + lock (tileQueue) { - Tile tile; - - lock (tileQueue) + if (tileQueue.TryDequeue(out tile)) { - if (!tileQueue.TryDequeue(out tile)) - { - taskCount--; - Logger?.LogDebug("Task count: {count}", taskCount); - break; - } - - progress?.Report(1d - (double)tileQueue.Count / tileCount); + return true; } + taskCount--; + Logger?.LogDebug("Task count: {count}", taskCount); + return false; + } + } + + private async Task LoadTilesFromQueue(TileSource tileSource, string cacheName, IProgress progress) + { + while (TryDequeueTile(out Tile tile)) + { tile.IsPending = false; - Logger?.LogDebug("Thread {thread,2}: Loading tile ({zoom}/{column}/{row})", Environment.CurrentManagedThreadId, tile.ZoomLevel, tile.Column, tile.Row); + + Logger?.LogDebug("Thread {thread,2}: Loading tile ({zoom}/{column}/{row})", + Environment.CurrentManagedThreadId, tile.ZoomLevel, tile.Column, tile.Row); try { @@ -159,6 +162,8 @@ namespace MapControl { Logger?.LogError(ex, "Failed loading tile {zoom}/{column}/{row}", tile.ZoomLevel, tile.Column, tile.Row); } + + progress?.Report(1d - (double)tileQueue.Count / tileCount); } }