【发布时间】:2014-04-03 07:53:08
【问题描述】:
问题是同步调用有效,但异步无效。
同步调用:
using (var bmp = GetImageBitmapFromUrl (item.Image))
{
imgNewsItem.SetImageBitmap (bmp);
bmp.Dispose ();
}
异步调用:
LoadNewsItemImageAsync (imgNewsItem, item.Image);
异步功能:
public async void LoadNewsItemImageAsync(ImageView v, string url)
{
using (Bitmap bmp = await GetImageBitmapFromUrlAsync(url))
{
v.SetImageBitmap (bmp);
bmp.Dispose ();
}
}
Task<Bitmap> GetImageBitmapFromUrlAsync (string url)
{
return Task.Run<Bitmap>(() => GetImageBitmapFromUrl (url));
}
以下函数在不通过异步任务运行时有效
Bitmap GetImageBitmapFromUrl(string url)
{
Bitmap imageBitmap = null;
try {
using (var webClient = new WebClient())
{
var imageBytes = webClient.DownloadData(url);
if (imageBytes != null && imageBytes.Length > 0)
{
imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0,
imageBytes.Length);
}
} catch (Exception ex) {
Log.WriteLine (LogPriority.Error, "GetImageFromBitmap Error", ex.Message);
}
return imageBitmap;
}
【问题讨论】:
-
您是否尝试过仅获取异步上的字节,并在数据可用后在 UI 上运行
BitmapFactory代码?
标签: c# android asynchronous bitmap xamarin