diff --git a/MapControl/Avalonia/TileImageLoader.Avalonia.cs b/MapControl/Avalonia/TileImageLoader.Avalonia.cs index 3be99d7c..574a9d74 100644 --- a/MapControl/Avalonia/TileImageLoader.Avalonia.cs +++ b/MapControl/Avalonia/TileImageLoader.Avalonia.cs @@ -13,7 +13,7 @@ namespace MapControl { var image = await loadImageFunc().ConfigureAwait(false); - await Dispatcher.UIThread.InvokeAsync(() => tile.SetImageSource(image)); + _ = Dispatcher.UIThread.InvokeAsync(() => tile.SetImageSource(image)); // no need to await InvokeAsync } } } diff --git a/MapControl/UWP/TileImageLoader.UWP.cs b/MapControl/UWP/TileImageLoader.UWP.cs index e270cda4..2db8b346 100644 --- a/MapControl/UWP/TileImageLoader.UWP.cs +++ b/MapControl/UWP/TileImageLoader.UWP.cs @@ -11,7 +11,7 @@ namespace MapControl { public partial class TileImageLoader { - private static Task LoadTileAsync(Tile tile, Func> loadImageFunc) + private static async Task LoadTileAsync(Tile tile, Func> loadImageFunc) { var tcs = new TaskCompletionSource(); @@ -20,9 +20,10 @@ namespace MapControl try { var image = await loadImageFunc(); + + tcs.TrySetResult(null); // tcs.Task has completed when image is loaded tile.SetImageSource(image); - tcs.TrySetResult(null); } catch (Exception ex) { @@ -30,9 +31,12 @@ namespace MapControl } } - _ = tile.Image.Dispatcher.RunAsync(CoreDispatcherPriority.Low, LoadTileImage); + if (!await tile.Image.Dispatcher.TryRunAsync(CoreDispatcherPriority.Low, LoadTileImage)) + { + tcs.TrySetCanceled(); + } - return tcs.Task; + await tcs.Task; } } } diff --git a/MapControl/WPF/TileImageLoader.WPF.cs b/MapControl/WPF/TileImageLoader.WPF.cs index 8b482078..c894fedd 100644 --- a/MapControl/WPF/TileImageLoader.WPF.cs +++ b/MapControl/WPF/TileImageLoader.WPF.cs @@ -14,7 +14,7 @@ namespace MapControl { var image = await loadImageFunc().ConfigureAwait(false); - await tile.Image.Dispatcher.InvokeAsync(() => tile.SetImageSource(image)); + _ = 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 00d6ce1a..44f18ce6 100644 --- a/MapControl/WinUI/TileImageLoader.WinUI.cs +++ b/MapControl/WinUI/TileImageLoader.WinUI.cs @@ -21,8 +21,9 @@ namespace MapControl { var image = await loadImageFunc(); + tcs.TrySetResult(); // tcs.Task has completed when image is loaded + tile.SetImageSource(image); - tcs.TrySetResult(); } catch (Exception ex) {