Ejemplo n.º 1
0
        public static BitmapImage GetImage(string url)
        {
            BitmapImage image = new BitmapImage();
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                //Wenn im Designmodus von Blend oder Visual Studio
                image.UriSource = new Uri(url);
                return image;
            }

            if (imageCache == null)
            {
                LoadCachedImageInfo();
            }

            //Prüfen auf ein vorhandenes gespeichertes Bild
            if (imageCache.ContainsKey(url))
            {
                //Prüfen auf Gültigkeit des Bildes
                if (DateTime.Compare(DateTime.Now, imageCache[url].Expiration) >= 0)
                {
                    ImageDownloadHelper.DownloadImage(url, image, imageCache[url]);
                }
                else
                {
                    if (IsolatedStorageFile.GetUserStoreForApplication().FileExists(imageCache[url].LocalFilename))
                    {
                        //Bild ist noch gültig
                        using (IsolatedStorageFile isf =  IsolatedStorageFile.GetUserStoreForApplication())
                        {
                            lock (_lock)
                            {
                                using (
                                    IsolatedStorageFileStream fs = isf.OpenFile(imageCache[url].LocalFilename,
                                                                                FileMode.Open))
                                {
                                    image.SetSource(fs);
                                    return image;
                                }
                            }
                        }
                    }
                    else
                    {
                        ImageDownloadHelper.DownloadImage(url, image, imageCache[url]);
                    }
                }
            }
            else
            {
                //Bild noch nicht gespeichert
                ImageCacheItem item = new ImageCacheItem();
                ImageDownloadHelper.DownloadImage(url, image, item);
            }
            return image;
        }
        //Hilfsmethode zum Laden des Bildes
        public static void DownloadImage(string url, BitmapImage image, ImageCacheItem item)
        {
            string filename = CreateUniqueFilename(url);
            item.LocalFilename = filename;

            //Erstellen des Hilfsobjektes zur Übergabe an den asynchronen Aufruf
            AsyncDataTransfer transfer = new AsyncDataTransfer();
            transfer.Item = item;
            transfer.Image = image;

            //Erstellen der Abfrage
            var wc = (HttpWebRequest)HttpWebRequest.Create(url);
            if (item.ImageID != null)
            {
                //Prüfen, ob das Bild im Web immer noch aktuell ist
                wc.Headers["If-None-Match"] = item.ImageID;
            }
            transfer.WebRequest = wc;

            wc.BeginGetResponse(RequestCallback, transfer);
        }