我想在后台运行这个函数。
private void SetPosters()
{
foreach(var i in posters)
{
i.SetImageBitmap(GetImageBitmapFromUrl(getLinkfromTag((i.Tag).ToString())));
}
}
private static string getLinkfromTag(String tag)
{
String Link = "-";
foreach(var i in movies_Arr)
{
if(i.Id == tag)
{
Link = i.HorizontalPoster;
}
}
return Link;
}
private static Bitmap GetImageBitmapFromUrl(string url)
{
Bitmap imageBitmap = null;
using (var webClient = new WebClient())
{
var imageBytes = webClient.DownloadData(url);
if (imageBytes != null && imageBytes.Length > 0)
{
imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
}
}
return imageBitmap;
}
当图片从网上下载时,我无法与我的用户界面进行交互。
其他信息 -
海报是一个包含所有activitymovies_Arr图像视图的列表视图,包含海报的链接。
你可以通过执行以下命令,使用 "火烧连营 "的方式运行你的方法。CommandSetPosters
命令,或者只是调用 LaunchPosters()
. 执行不会被等待,完全是异步。请注意,我们调用了 SetImageBitmap
否则你就无法正常访问UI元素。
public ICommand CommandSetPosters
{
get
{
return new Command<object>((object context) =>
{
LaunchPosters(context);
});
}
}
public void LaunchPosters(object param)
{
Task.Run(async () =>
{
//can use param from command if needed
SetPosters();
}).ConfigureAwait(false);
}
private void SetPosters()
{
foreach (var i in posters)
{
var bitmap = GetImageBitmapFromUrl(getLinkfromTag((i.Tag).ToString()));
Device.BeginInvokeOnMainThread(() =>
{
// Update the UI
i.SetImageBitmap(bitmap);
});
}
}