Update TileImageLoader.cs

This commit is contained in:
ClemensFischer 2025-08-20 22:46:03 +02:00
parent e725be654b
commit 05824e603b

View file

@ -82,11 +82,19 @@ namespace MapControl
/// </summary> /// </summary>
public async Task LoadTilesAsync(IEnumerable<Tile> tiles, TileSource tileSource, string cacheName, IProgress<double> progress, CancellationToken cancellationToken) public async Task LoadTilesAsync(IEnumerable<Tile> tiles, TileSource tileSource, string cacheName, IProgress<double> progress, CancellationToken cancellationToken)
{ {
var pendingTiles = tiles.Where(tile => tile.IsPending).ToList();
if (pendingTiles.Count > 0)
{
var progressCount = 0;
if (Cache == null || tileSource.UriTemplate == null || !tileSource.UriTemplate.StartsWith("http"))
{
cacheName = null; // disable tile image caching
}
using (var semaphore = new SemaphoreSlim(MaxLoadTasks, MaxLoadTasks)) using (var semaphore = new SemaphoreSlim(MaxLoadTasks, MaxLoadTasks))
{ {
var pendingTiles = tiles.Where(tile => tile.IsPending).ToList();
var tileCount = 0;
async Task LoadTile(Tile tile) async Task LoadTile(Tile tile)
{ {
try try
@ -100,14 +108,14 @@ namespace MapControl
tile.IsPending = false; tile.IsPending = false;
progress?.Report((double)++tileCount / pendingTiles.Count); progress?.Report((double)++progressCount / pendingTiles.Count);
Logger?.LogTrace("[{thread}] Loading tile image {zoom}/{column}/{row}", Environment.CurrentManagedThreadId, tile.ZoomLevel, tile.Column, tile.Row); Logger?.LogTrace("[{thread}] Loading tile image {zoom}/{column}/{row}", Environment.CurrentManagedThreadId, tile.ZoomLevel, tile.Column, tile.Row);
var requestCancellationToken = RequestCancellationEnabled ? cancellationToken : CancellationToken.None;
try try
{ {
var requestCancellationToken = RequestCancellationEnabled ? cancellationToken : CancellationToken.None;
await LoadTileImage(tile, tileSource, cacheName, requestCancellationToken).ConfigureAwait(false); await LoadTileImage(tile, tileSource, cacheName, requestCancellationToken).ConfigureAwait(false);
} }
catch (Exception ex) catch (Exception ex)
@ -118,7 +126,8 @@ namespace MapControl
semaphore.Release(); semaphore.Release();
} }
await Task.WhenAll(pendingTiles.Select(LoadTile)); await Task.WhenAll(pendingTiles.Select(tile => Task.Run(async () => await LoadTile(tile))));
}
if (cancellationToken.IsCancellationRequested) if (cancellationToken.IsCancellationRequested)
{ {