private async Task<IEnumerable<LocomotiveImage>> DownloadUserImagesAsync(string host, string pageUrl)
        {
            var result = new List<LocomotiveImage>();

            try
            {
                string html = null;
                using (var client = new HttpClient())
                    html = await client.GetStringAsync($"http://{host}{pageUrl}");

                if (!string.IsNullOrEmpty(html))
                {
                    var document = new HtmlDocument();
                    document.LoadHtml(html);

                    var navListParagraph = document.DocumentNode.Descendants("p").Where(i => i.GetAttributeValue("class", "").Contains("navlist")).FirstOrDefault();
                    if (navListParagraph != null)
                    {
                        var imgs = document.DocumentNode.Descendants("img").Where(i => i.GetAttributeValue("src", "").Contains(".bmp")).ToList();
                        foreach (var img in imgs)
                        {
                            var tr = img.Ancestors("tr").FirstOrDefault();
                            if (tr != null)
                            {
                                var tds = tr.Descendants("td").ToList();

                                int idx = int.Parse(tds[0].InnerText);
                                string name = tds[2].InnerText.Replace("\n", "");
                                string url = img.GetAttributeValue("src", null);

                                var item = new LocomotiveImage(LocomotiveImageType.User, idx, name);
                                await item.PopulateAsync(new Uri(string.Format(@"http://{0:s}{1:s}", host, url), UriKind.Absolute));
                                result.Add(item);

                                //var item = UserImages.FirstOrDefault(userImg => userImg.Index == idx);
                                //if (item != null)
                                //{
                                //    item.Name = name;
                                //    await item.PopulateAsync(new Uri(string.Format(@"http://{0:s}{1:s}", host, url), UriKind.Absolute));
                                //}
                            }
                        }

                        //var unusedIdx = new List<int>(UserImages.Where(item => item.BitmapImage == null).Select(item => item.Index));
                        //foreach (var idx in unusedIdx)
                        //{
                        //    var item = UserImages.FirstOrDefault(i => i.Index == idx);
                        //    if (item != null)
                        //        UserImages.Remove(item);
                        //}
                    }

                    //foreach (var img in UserImages)
                    //{
                    //    var loc = Items.FirstOrDefault(l => l.Image != null && l.Image.Type == LocomotiveImageType.User && l.Image.Index == img.Index);
                    //    loc?.Image.From(img);
                    //}
                }
            }
            catch { }

            return result;
        }
        private void DownloadUserImage(string host, LocomotiveImage img)
        {
            if (!string.IsNullOrEmpty(img.Url))
            {
                WebClient webClient = new WebClient();
                webClient.OpenReadCompleted += delegate(object sender, OpenReadCompletedEventArgs e)
                {
                    if (e.Error != null)
                        Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(e.Error.Message, App.Name, MessageBoxButton.OK); });
                    else
                    {
                        int imageIdx = (int)e.UserState;

                        ExtendedImage eimg = new ExtendedImage();
                        var bd = new BmpDecoder();
                        //var bd = new PngDecoder();
                        //var bd = new JpegDecoder();
                        //var bd = new GifDecoder();
                        bd.Decode(eimg, e.Result);
                        //MemoryStream ms = (MemoryStream)eimg.ToStreamByExtension("bmp");

                        //BitmapImage bi = new BitmapImage();
                        //bi.SetSource(ms);

                        //App.EcosModel.LocomotivesManager.ItemsUser[imageIdx].BitmapImage = bi;

                        e.Result.Close();
                    }
                };

                webClient.OpenReadAsync(new Uri(host + img.Url, UriKind.Absolute), img.Index);
            }
        }
 private async Task PopulateSystemImagesAsync()
 {
     for (int i = 0; i < 82; i++)
     {
         var image = new LocomotiveImage(LocomotiveImageType.Internal, i);
         Images.Add(image);
         await image.PopulateAsync();
     }
 }