Reset Tile.IsPending on request cancellation

This commit is contained in:
ClemensFischer 2025-08-20 17:48:39 +02:00
parent c3386d1fbb
commit 545e49b306
5 changed files with 22 additions and 8 deletions

View file

@ -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
}

View file

@ -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;
}
}

View file

@ -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;

View file

@ -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
}

View file

@ -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;