使用异步任务返回位图

时间:2014-01-12 01:31:45

标签: c# android bitmap android-asynctask xamarin

我正在使用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对象中的最佳方法是什么?

2 个答案:

答案 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
        }
    }