Exemplo n.º 1
0
        private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey)
        {
            var cacheItem = await Cache.GetAsync(cacheKey);

            var cacheBuffer = cacheItem?.Buffer;
            var loaded      = false;

            if (cacheBuffer == null || cacheItem.Expiration < DateTime.UtcNow)
            {
                try
                {
                    loaded = await ImageLoader.LoadHttpTileImageAsync(uri, async (buffer, maxAge) =>
                    {
                        await SetTileImageAsync(tile, buffer); // create BitmapImage before caching

                        await Cache.SetAsync(cacheKey, buffer, GetExpiration(maxAge));
                    });
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("TileImageLoader: {0}: {1}", uri, ex.Message);
                }
            }

            if (!loaded && cacheBuffer != null) // keep expired image if download failed
            {
                await SetTileImageAsync(tile, cacheBuffer);
            }
        }
Exemplo n.º 2
0
        private async Task LoadTileImageAsync(Tile tile, Uri uri, string cacheKey)
        {
            DateTime expiration;
            var      buffer = GetCachedImage(cacheKey, out expiration);
            var      loaded = false;

            if (buffer == null || expiration < DateTime.UtcNow)
            {
                try
                {
                    loaded = await ImageLoader.LoadHttpTileImageAsync(uri, async (stream, maxAge) =>
                    {
                        await SetTileImageAsync(tile, stream); // create BitmapFrame before caching

                        SetCachedImage(cacheKey, stream, GetExpiration(maxAge));
                    });
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("TileImageLoader: {0}: {1}", uri, ex.Message);
                }
            }

            if (!loaded && buffer != null) // keep expired image if download failed
            {
                using (var stream = new MemoryStream(buffer))
                {
                    await SetTileImageAsync(tile, stream);
                }
            }
        }