private IEnumerable<ImageInfo> LoadFromTxt() { if (!Uri.IsFile) throw new NotImplementedException("Loading slideshows from a remote source is not implemented."); using (var reader = new StreamReader(Uri.LocalPath)) { string line = reader.ReadLine(); if (line == null) yield break; Uri alternateBaseUri = null; if (line.StartsWith("#")) { alternateBaseUri = new Uri(line.Substring(1).Trim()); line = reader.ReadLine(); // read next line } while (line != null) { ImageInfo next = null; try { var relativeUri = new Uri(line, UriKind.RelativeOrAbsolute); if (relativeUri.IsAbsoluteUri) next = new ImageInfo(relativeUri); else { var uri = new Uri(Uri, relativeUri); if (uri.IsFile && !File.Exists(uri.LocalPath)) { // try alternate base uri if the file does not exist uri = new Uri(alternateBaseUri, relativeUri); } next = new ImageInfo(uri); } } catch (UriFormatException) { continue; } finally { line = reader.ReadLine(); // read next line } yield return next; } } }