У меня проблема с конвертером из Uri в BitmapImage. Uri - это URL-адрес изображения в Интернете. Я использую этот конвертер для элемента в списке.
Я загружаю изображение с веб-страницы и создаю из этого потока BitampImage
Проблема в том, что если список содержит около 100–250 элементов, приложение зависает, я пытаюсь вызвать WebRequestMethod в другом потоке, но он не работает.
Вот корневая часть кода:
private static BitmapImage GetImgFromAzet(int sex, Uri imgUri)
{
try
{
if (imgUri == null)
{
if (sex == (int)Sex.Man)
{
return new BitmapImage(new Uri(@"pack://application:,,,/Spirit;Component/images/DefaultAvatars/man.jpg",
UriKind.RelativeOrAbsolute));
}
else
{
return new BitmapImage(new Uri(@"pack://application:,,,/Spirit;Component/images/DefaultAvatars/woman.jpg",
UriKind.RelativeOrAbsolute));
}
}
else
{
BitmapImage image = null;
Task.Factory.StartNew(() =>
{
WebRequest webRequest = WebRequest.CreateDefault(imgUri);
webRequest.ContentType = "image/jpeg";
WebResponse webResponse = webRequest.GetResponse();
image = new BitmapImage();
image.CreateOptions = BitmapCreateOptions.None;
image.CacheOption = BitmapCacheOption.OnLoad;
image.BeginInit();
image.StreamSource = webResponse.GetResponseStream();
image.EndInit();
return image;
//((System.Action)(() =>
//{
// //webResponse.Close();
//})).OnUIThread();
});
return image;
}
}
catch (Exception)
{
// по умолчанию return new BitmapImage (новый Uri (PokecUrl.Avatar, UriKind.RelativeOrAbsolute)); }}
Моя цель - загрузить изображение из Интернета, создать из него объект BitamImage и вернуться в качестве элемента управления Source of Image, но мне нужно избежать зависания приложения. Также проблема в том, что если я закрою webResponse, он сломает весь код.
ИЗМЕНИТЬ:
Я пробую это:
BitmapImage image;
WebRequest req = WebRequest.CreateDefault(imgUri);
req.ContentType = "image/jpeg";
using (var res = req.GetResponse())
{
image = new BitmapImage();
image.CreateOptions = BitmapCreateOptions.None;
image.CacheOption = BitmapCacheOption.OnLoad;
image.BeginInit();
image.UriSource = imgUri;
image.StreamSource = res.GetResponseStream();
image.EndInit();
}
но где-то должна быть ошибка, код битый.
Любой совет?