private BitmapImage LoadImage(string key, string filePath) { BitmapImage bitmapImage = null; if (Fetching.Contains(key)) { return(new BitmapImage()); } try { Application.Current.Dispatcher.Invoke(() => { bitmapImage = new BitmapImage(); using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { bitmapImage.BeginInit(); bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.StreamSource = stream; bitmapImage.EndInit(); bitmapImage.Freeze(); } }); } catch (FileFormatException e) { Log.Error(e); try { File.Delete(filePath); //TODO: Implement retry } catch (Exception) { } } catch (IOException e) { Log.Error(e); } return(bitmapImage); }
private static async Task <XDocument> LoadFromUrlAsync(Uri url) { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Add( "User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.3; WOW64; Trident/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0)"); Fetching?.Invoke(null, new FetchingEventArgs(url)); try { using (var hs = await httpClient.GetStreamAsync(url)) { var document = SgmlReader.Parse(hs); Fetched?.Invoke(null, new FetchedEventArgs(url, document, null)); return(document); } } catch (Exception ex) { Fetched?.Invoke(null, new FetchedEventArgs(url, null, ex)); throw; } } }