在后台运行函数,同时让UI可交互C# Xamarin。

问题描述 投票:0回答:1

我想在后台运行这个函数。

        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图像视图的列表视图,包含海报的链接。

c# android .net xamarin xamarin.android
1个回答
0
投票

你可以通过执行以下命令,使用 "火烧连营 "的方式运行你的方法。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);
        });

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.