Uri から BitmapImage へのコンバーターに問題があります。Uri は Web 上の画像の URL です。リストボックスのアイテムでこのコンバーターを使用します。
Web ページから画像をダウンロードし、このストリームから作成します 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)
{
//デフォルトは new BitmapImage(new Uri(PokecUrl.Avatar,UriKind.RelativeOrAbsolute)); を返します。} }
私の目的は、Web から画像をダウンロードし、彼から BitamImage オブジェクトを作成し、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();
}
しかし、どこかにバグがあるはずです。コードが壊れています。
何かアドバイス?