Minor cleanup in TileImageLoader

This commit is contained in:
ClemensF 2020-09-24 23:33:23 +02:00
parent fa5368e77a
commit ee4f049334
5 changed files with 15 additions and 13 deletions

View file

@ -208,7 +208,7 @@ namespace MapControl
Children.Add(tile.Image); Children.Add(tile.Image);
} }
TileImageLoader.LoadTilesAsync(Tiles, TileSource, SourceName); TileImageLoader.LoadTiles(Tiles, TileSource, SourceName);
} }
protected override Size MeasureOverride(Size availableSize) protected override Size MeasureOverride(Size availableSize)

View file

@ -19,7 +19,7 @@ namespace MapControl
{ {
public interface ITileImageLoader public interface ITileImageLoader
{ {
void LoadTilesAsync(IEnumerable<Tile> tiles, TileSource tileSource, string sourceName); void LoadTiles(IEnumerable<Tile> tiles, TileSource tileSource, string sourceName);
} }
public abstract class MapTileLayerBase : Panel, IMapLayer public abstract class MapTileLayerBase : Panel, IMapLayer

View file

@ -37,7 +37,7 @@ namespace MapControl
public static string CacheKeyFormat { get; set; } = "{0}/{1}/{2}/{3}{4}"; public static string CacheKeyFormat { get; set; } = "{0}/{1}/{2}/{3}{4}";
public class TileQueue : ConcurrentStack<Tile> private class TileQueue : ConcurrentStack<Tile>
{ {
public void Enqueue(IEnumerable<Tile> tiles) public void Enqueue(IEnumerable<Tile> tiles)
{ {
@ -58,10 +58,10 @@ namespace MapControl
/// Loads all pending tiles from the tiles collection. /// Loads all pending tiles from the tiles collection.
/// If tileSource.UriFormat starts with "http" and sourceName is a non-empty string, /// If tileSource.UriFormat starts with "http" and sourceName is a non-empty string,
/// tile images will be cached in the TileImageLoader's Cache (if it's not null). /// tile images will be cached in the TileImageLoader's Cache (if it's not null).
/// The method is async void because it implements void ITileImageLoader.LoadTilesAsync /// The method is async void because it implements void ITileImageLoader.LoadTiles
/// and is not awaited when it is called in MapTileLayer.UpdateTiles(). /// and is not awaited when it is called in MapTileLayer.UpdateTiles().
/// </summary> /// </summary>
public async void LoadTilesAsync(IEnumerable<Tile> tiles, TileSource tileSource, string sourceName) public async void LoadTiles(IEnumerable<Tile> tiles, TileSource tileSource, string sourceName)
{ {
tileQueue.Clear(); tileQueue.Clear();

View file

@ -186,7 +186,7 @@ namespace MapControl
} }
} }
TileImageLoader.LoadTilesAsync(tiles, tileSource, sourceName); TileImageLoader.LoadTiles(tiles, tileSource, sourceName);
} }
private async void OnLoaded(object sender, RoutedEventArgs e) private async void OnLoaded(object sender, RoutedEventArgs e)

View file

@ -56,7 +56,9 @@ namespace MapControl
if (buffer != null && buffer.Length > 0) if (buffer != null && buffer.Length > 0)
{ {
SetTileImageAsync(tile, await ImageLoader.LoadImageAsync(buffer).ConfigureAwait(false)); var image = await ImageLoader.LoadImageAsync(buffer).ConfigureAwait(false);
SetTileImage(tile, image);
} }
} }
@ -64,15 +66,15 @@ namespace MapControl
{ {
var image = await tileSource.LoadImageAsync(tile.XIndex, tile.Y, tile.ZoomLevel).ConfigureAwait(false); var image = await tileSource.LoadImageAsync(tile.XIndex, tile.Y, tile.ZoomLevel).ConfigureAwait(false);
if (image != null) SetTileImage(tile, image);
{
SetTileImageAsync(tile, image);
}
} }
private static void SetTileImageAsync(Tile tile, ImageSource image) private static void SetTileImage(Tile tile, ImageSource image)
{ {
tile.Image.Dispatcher.InvokeAsync(() => tile.SetImage(image)); if (image != null)
{
tile.Image.Dispatcher.InvokeAsync(() => tile.SetImage(image));
}
} }
private static Task<ImageCacheItem> GetCacheAsync(string cacheKey) private static Task<ImageCacheItem> GetCacheAsync(string cacheKey)