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); }