diff --git a/MapControl/Shared/ImageLoader.cs b/MapControl/Shared/ImageLoader.cs index feb4e932..5c14c3e4 100644 --- a/MapControl/Shared/ImageLoader.cs +++ b/MapControl/Shared/ImageLoader.cs @@ -70,14 +70,13 @@ namespace MapControl } } - internal static async Task GetHttpResponseAsync(Uri uri, bool continueOnCapturedContext = true) + internal static async Task GetHttpResponseAsync(Uri uri) { HttpResponse response = null; try { - using (var responseMessage = await HttpClient - .GetAsync(uri, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(continueOnCapturedContext)) + using (var responseMessage = await HttpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false)) { if (responseMessage.IsSuccessStatusCode) { @@ -86,7 +85,7 @@ namespace MapControl if (!responseMessage.Headers.TryGetValues("X-VE-Tile-Info", out IEnumerable tileInfo) || !tileInfo.Contains("no-tile")) { - buffer = await responseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(continueOnCapturedContext); + buffer = await responseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(false); } response = new HttpResponse(buffer, responseMessage.Headers.CacheControl?.MaxAge); diff --git a/MapControl/Shared/TileSource.cs b/MapControl/Shared/TileSource.cs index c543732d..331a7618 100644 --- a/MapControl/Shared/TileSource.cs +++ b/MapControl/Shared/TileSource.cs @@ -108,11 +108,11 @@ namespace MapControl /// /// Loads a tile ImageSource asynchronously from GetUri(x, y, zoomLevel). /// - public virtual async Task LoadImageAsync(int x, int y, int zoomLevel) + public virtual Task LoadImageAsync(int x, int y, int zoomLevel) { var uri = GetUri(x, y, zoomLevel); - return uri != null ? await ImageLoader.LoadImageAsync(uri) : null; + return uri != null ? ImageLoader.LoadImageAsync(uri) : Task.FromResult((ImageSource)null); } private string GetDefaultUri(int x, int y, int zoomLevel) diff --git a/MapControl/UWP/Tile.UWP.cs b/MapControl/UWP/Tile.UWP.cs index ae186b3c..d6816025 100644 --- a/MapControl/UWP/Tile.UWP.cs +++ b/MapControl/UWP/Tile.UWP.cs @@ -16,7 +16,7 @@ namespace MapControl { Pending = false; - if (fadeIn && MapBase.ImageFadeDuration > TimeSpan.Zero) + if (image != null && fadeIn && MapBase.ImageFadeDuration > TimeSpan.Zero) { if (image is BitmapImage bitmap && bitmap.UriSource != null) { diff --git a/MapControl/UWP/TileImageLoader.UWP.cs b/MapControl/UWP/TileImageLoader.UWP.cs index 6f233c2c..31a9af90 100644 --- a/MapControl/UWP/TileImageLoader.UWP.cs +++ b/MapControl/UWP/TileImageLoader.UWP.cs @@ -35,7 +35,7 @@ namespace MapControl if (cacheItem == null || cacheItem.Expiration < DateTime.UtcNow) { - var response = await ImageLoader.GetHttpResponseAsync(uri, false).ConfigureAwait(false); + var response = await ImageLoader.GetHttpResponseAsync(uri).ConfigureAwait(false); if (response != null) // download succeeded { @@ -64,13 +64,7 @@ namespace MapControl { try { - var image = await loadImageFunc(); - - if (image != null) - { - tile.SetImage(image); - } - + tile.SetImage(await loadImageFunc()); tcs.SetResult(null); } catch (Exception ex) @@ -79,7 +73,7 @@ namespace MapControl } }); - await tcs.Task.ConfigureAwait(false); + await tcs.Task.ConfigureAwait(false); // wait until image loading in the UI thread is completed } } } diff --git a/MapControl/WPF/Tile.WPF.cs b/MapControl/WPF/Tile.WPF.cs index f2d5af31..9a99dd66 100644 --- a/MapControl/WPF/Tile.WPF.cs +++ b/MapControl/WPF/Tile.WPF.cs @@ -15,7 +15,7 @@ namespace MapControl { Pending = false; - if (fadeIn && MapBase.ImageFadeDuration > TimeSpan.Zero) + if (image != null && fadeIn && MapBase.ImageFadeDuration > TimeSpan.Zero) { if (image is BitmapSource bitmap && !bitmap.IsFrozen && bitmap.IsDownloading) { diff --git a/MapControl/WPF/TileImageLoader.WPF.cs b/MapControl/WPF/TileImageLoader.WPF.cs index 989d6129..5f546669 100644 --- a/MapControl/WPF/TileImageLoader.WPF.cs +++ b/MapControl/WPF/TileImageLoader.WPF.cs @@ -44,7 +44,7 @@ namespace MapControl if (cacheItem == null || cacheItem.Expiration < DateTime.UtcNow) { - var response = await ImageLoader.GetHttpResponseAsync(uri, false).ConfigureAwait(false); + var response = await ImageLoader.GetHttpResponseAsync(uri).ConfigureAwait(false); if (response != null) // download succeeded { @@ -58,7 +58,7 @@ namespace MapControl { var image = await ImageLoader.LoadImageAsync(buffer).ConfigureAwait(false); - SetTileImage(tile, image); + await tile.Image.Dispatcher.InvokeAsync(() => tile.SetImage(image)); } } @@ -66,15 +66,7 @@ namespace MapControl { var image = await tileSource.LoadImageAsync(tile.XIndex, tile.Y, tile.ZoomLevel).ConfigureAwait(false); - SetTileImage(tile, image); - } - - private static void SetTileImage(Tile tile, ImageSource image) - { - if (image != null) - { - tile.Image.Dispatcher.InvokeAsync(() => tile.SetImage(image)); - } + await tile.Image.Dispatcher.InvokeAsync(() => tile.SetImage(image)); } private static Task GetCacheAsync(string cacheKey)