我正在使用Xamarin,我希望在我的应用运行时从不同的网址获取许多位图。我做了一些研究,发现我需要使用异步任务。
我可以帮忙写一下这段代码吗?
我在Java中有以下代码,但是,我无法将其转换为C#:
private class LoadImage extends AsyncTask<String, Void, Bitmap> {
@Override
protected String doInBackground(String... params) {
URL myurl = new URL(params[0]);
Bitmap bmp = BitmapFactory.DecodeStream(myurl.OpenConnection().InputStream);
return bmp;
}
@Override
protected void onPostExecute(String result) {
item.icon = BitmapDescriptorFactory.FromBitmap(bmp);
item.Location = new LatLng (-41.227834, 174.812857);
item.Snippet = "Snippet2";
item.Title = "Title2";
item.ShowInfoWindowOnStartup = true;
_mapLocationList.Add(item);
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
另外,如何调用代码来检索位图?
提前致谢
修改
基本上,我有许多在线图像文件,我希望检索这些文件并将它们存储在一个位图中。
如果我使用主线程,则会发生错误。
获取这些图像文件并将其存储在Bitmap对象中的最佳方法是什么?
答案 0 :(得分:0)
new LoadImage.execute("Your string paramters");
execute方法调用doInBackground等。
答案 1 :(得分:0)
您的问题不够具体,无法得到真正的答案。显然你想要在不阻塞线程的情况下下载图像。此操作不需要使用任务或C#async / await关键字。或者您的意图是尽可能快地并行下载许多图像?
在注册事件后启动DownloadDataAsync将立即继续下一个语句,而在稍后的时间点将调用DownloadComplete方法 并且您的图像可用
public static void BeginDownload()
{
var wc = new WebClient();
wc.DownloadDataCompleted += DownloadComplete;
wc.DownloadDataAsync(new Uri("http://www......"));
...
}
private static void DownloadComplete(object sender, DownloadDataCompletedEventArgs args)
{
using (var ms = new MemoryStream(args.Result))
{
Image image = Image.FromStream(ms);
// At this point you have the image downloaded and available
}
}