diff --git a/MapControl/Avalonia/TileImageLoader.Avalonia.cs b/MapControl/Avalonia/TileImageLoader.Avalonia.cs index ed3a8fd8..90010fec 100644 --- a/MapControl/Avalonia/TileImageLoader.Avalonia.cs +++ b/MapControl/Avalonia/TileImageLoader.Avalonia.cs @@ -12,7 +12,11 @@ namespace MapControl { var image = await loadImageFunc().ConfigureAwait(false); - if (!cancellationToken.IsCancellationRequested) + if (cancellationToken.IsCancellationRequested) + { + tile.IsPending = true; + } + else { _ = Dispatcher.UIThread.InvokeAsync(() => tile.SetImageSource(image)); // no need to await InvokeAsync } diff --git a/MapControl/Shared/TileImageLoader.cs b/MapControl/Shared/TileImageLoader.cs index be1c5748..f06241d0 100644 --- a/MapControl/Shared/TileImageLoader.cs +++ b/MapControl/Shared/TileImageLoader.cs @@ -112,8 +112,6 @@ namespace MapControl { Logger?.LogError(ex, "Failed loading tile image {zoom}/{column}/{row}", tile.ZoomLevel, tile.Column, tile.Row); } - - tile.IsPending = cancellationToken.IsCancellationRequested && tile.Image == null; } } diff --git a/MapControl/UWP/TileImageLoader.UWP.cs b/MapControl/UWP/TileImageLoader.UWP.cs index 4fbe71be..f281fc93 100644 --- a/MapControl/UWP/TileImageLoader.UWP.cs +++ b/MapControl/UWP/TileImageLoader.UWP.cs @@ -20,7 +20,11 @@ namespace MapControl tcs.TrySetResult(null); // tcs.Task has completed when image is loaded - if (!cancellationToken.IsCancellationRequested) + if (cancellationToken.IsCancellationRequested) + { + tile.IsPending = true; + } + else { tile.SetImageSource(image); } @@ -33,7 +37,7 @@ namespace MapControl if (!await tile.Image.Dispatcher.TryRunAsync(CoreDispatcherPriority.Low, LoadTileImage)) { - tcs.TrySetCanceled(); + tcs.TrySetCanceled(cancellationToken); } await tcs.Task; diff --git a/MapControl/WPF/TileImageLoader.WPF.cs b/MapControl/WPF/TileImageLoader.WPF.cs index b1ada9ee..48e2a992 100644 --- a/MapControl/WPF/TileImageLoader.WPF.cs +++ b/MapControl/WPF/TileImageLoader.WPF.cs @@ -11,7 +11,11 @@ namespace MapControl { var image = await loadImageFunc().ConfigureAwait(false); - if (!cancellationToken.IsCancellationRequested) + if (cancellationToken.IsCancellationRequested) + { + tile.IsPending = true; + } + else { _ = tile.Image.Dispatcher.InvokeAsync(() => tile.SetImageSource(image)); // no need to await InvokeAsync } diff --git a/MapControl/WinUI/TileImageLoader.WinUI.cs b/MapControl/WinUI/TileImageLoader.WinUI.cs index 0ffc8158..75542a27 100644 --- a/MapControl/WinUI/TileImageLoader.WinUI.cs +++ b/MapControl/WinUI/TileImageLoader.WinUI.cs @@ -20,7 +20,11 @@ namespace MapControl tcs.TrySetResult(); // tcs.Task has completed when image is loaded - if (!cancellationToken.IsCancellationRequested) + if (cancellationToken.IsCancellationRequested) + { + tile.IsPending = true; + } + else { tile.SetImageSource(image); } @@ -33,7 +37,7 @@ namespace MapControl if (!tile.Image.DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, LoadTileImage)) { - tcs.TrySetCanceled(); + tcs.TrySetCanceled(cancellationToken); } return tcs.Task;