mirror of
https://github.com/ClemensFischer/XAML-Map-Control.git
synced 2025-12-06 07:12:04 +01:00
Version 4.12.2 Minor changes in TileImageLoader.
This commit is contained in:
parent
0c0a0ae511
commit
8491a4fc7c
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -63,34 +63,20 @@ namespace MapControl
|
|||
|
||||
if (tileSource != null && tiles.Any())
|
||||
{
|
||||
if (Cache == null || tileSource.UriFormat == null || !tileSource.UriFormat.StartsWith("http"))
|
||||
{
|
||||
sourceName = null; // do not use cache
|
||||
}
|
||||
|
||||
pendingTiles.PushRange(tiles.Reverse().ToArray());
|
||||
|
||||
Func<Tile, Task> loadFunc;
|
||||
|
||||
if (Cache != null && !string.IsNullOrEmpty(sourceName) &&
|
||||
tileSource.UriFormat != null && tileSource.UriFormat.StartsWith("http"))
|
||||
{
|
||||
loadFunc = tile => LoadCachedTileImageAsync(tile, tileSource, sourceName);
|
||||
}
|
||||
else
|
||||
{
|
||||
loadFunc = tile => LoadTileImageAsync(tile, tileSource);
|
||||
}
|
||||
|
||||
var newTasks = Math.Min(pendingTiles.Count, MaxLoadTasks) - taskCount;
|
||||
|
||||
while (--newTasks >= 0)
|
||||
{
|
||||
Interlocked.Increment(ref taskCount);
|
||||
|
||||
var task = Task.Run(() => LoadTilesAsync(loadFunc)); // do not await
|
||||
}
|
||||
|
||||
//Debug.WriteLine("{0}: {1} tasks", Environment.CurrentManagedThreadId, taskCount);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadTilesAsync(Func<Tile, Task> loadTileImageFunc)
|
||||
Task.Run(async () => // do not await
|
||||
{
|
||||
Tile tile;
|
||||
|
||||
|
|
@ -100,7 +86,7 @@ namespace MapControl
|
|||
|
||||
try
|
||||
{
|
||||
await loadTileImageFunc(tile);
|
||||
await LoadTileImageAsync(tile, tileSource, sourceName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
|
@ -109,10 +95,18 @@ namespace MapControl
|
|||
}
|
||||
|
||||
Interlocked.Decrement(ref taskCount);
|
||||
//Debug.WriteLine("{0}: {1} tasks", Environment.CurrentManagedThreadId, taskCount);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task LoadCachedTileImageAsync(Tile tile, TileSource tileSource, string sourceName)
|
||||
private async Task LoadTileImageAsync(Tile tile, TileSource tileSource, string sourceName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sourceName))
|
||||
{
|
||||
await LoadTileImageAsync(tile, tileSource);
|
||||
}
|
||||
else
|
||||
{
|
||||
var uri = tileSource.GetUri(tile.XIndex, tile.Y, tile.ZoomLevel);
|
||||
|
||||
|
|
@ -127,7 +121,8 @@ namespace MapControl
|
|||
|
||||
var cacheKey = string.Format(CacheKeyFormat, sourceName, tile.ZoomLevel, tile.XIndex, tile.Y, extension);
|
||||
|
||||
await LoadCachedTileImageAsync(tile, uri, cacheKey);
|
||||
await LoadTileImageAsync(tile, uri, cacheKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -110,15 +110,9 @@ namespace MapControl
|
|||
/// </summary>
|
||||
public virtual async Task<ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
|
||||
{
|
||||
ImageSource imageSource = null;
|
||||
var uri = GetUri(x, y, zoomLevel);
|
||||
|
||||
if (uri != null)
|
||||
{
|
||||
imageSource = await ImageLoader.LoadImageAsync(uri);
|
||||
}
|
||||
|
||||
return imageSource;
|
||||
return uri != null ? await ImageLoader.LoadImageAsync(uri) : null;
|
||||
}
|
||||
|
||||
private string GetDefaultUri(int x, int y, int zoomLevel)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ namespace MapControl
|
|||
/// </summary>
|
||||
public static Caching.IImageCache Cache { get; set; }
|
||||
|
||||
private async Task LoadCachedTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
||||
private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
||||
{
|
||||
var cacheItem = await Cache.GetAsync(cacheKey);
|
||||
var cacheBuffer = cacheItem?.Buffer;
|
||||
|
|
@ -47,7 +47,7 @@ namespace MapControl
|
|||
}
|
||||
}
|
||||
|
||||
if (cacheBuffer != null)
|
||||
if (cacheBuffer != null) // cached image not expired or download failed
|
||||
{
|
||||
await LoadTileImageAsync(tile, cacheBuffer);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ using System.Windows;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ namespace MapControl
|
|||
/// </summary>
|
||||
public static ObjectCache Cache { get; set; } = MemoryCache.Default;
|
||||
|
||||
private async Task LoadCachedTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
||||
private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey)
|
||||
{
|
||||
DateTime expiration;
|
||||
var cacheBuffer = GetCachedImage(cacheKey, out expiration);
|
||||
|
|
@ -52,7 +52,7 @@ namespace MapControl
|
|||
}
|
||||
}
|
||||
|
||||
if (cacheBuffer != null)
|
||||
if (cacheBuffer != null) // cached image not expired or download failed
|
||||
{
|
||||
using (var stream = new MemoryStream(cacheBuffer))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCompany("Clemens Fischer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Clemens Fischer")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyVersion("4.12.1")]
|
||||
[assembly: AssemblyFileVersion("4.12.1")]
|
||||
[assembly: AssemblyVersion("4.12.2")]
|
||||
[assembly: AssemblyFileVersion("4.12.2")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
|
|||
Loading…
Reference in a new issue