如何在Xamarin表单中从URI异步加载图像

时间:2015-07-29 16:15:43

标签: c# mobile asynchronous xamarin xamarin.forms

以下是我当前加载图片的代码:




  System.Uri uri;
 System.Uri.TryCreate(imageURI,UriKind。绝对,out uri);
 _companyImage.Source = ImageSource.FromUri(uri);
  




问题在于整体程序必须等待这个任务完成,我想异步加载图像,但我无法弄清楚如何异步创建图像源。




4 个答案:

答案 0 :(得分:5)

异步获取数据并在完成后将其分配给您的源。

System.Uri uri;
System.Uri.TryCreate(imageURI, UriKind.Absolute, out uri);
Task<ImageSource> result = Task<ImageSource>.Factory.StartNew(() => ImageSource.FromUri(uri));
_companyImage.Source = await result;

答案 1 :(得分:3)

您只需将Image.Source属性设置为URI,然后让Xamarin.Forms为您完成工作(按"Working with Images" in Xamarin.Forms docs)。

实施例

var someImage = new Image() {
    Aspect = Aspect.AspectFit,
    Source = ImageSource.FromUri(new Uri("http://xamarin.com/content/images/pages/branding/assets/xamagon.png")),
};

答案 2 :(得分:0)

将您的网址设置为Source proprty或从viewmodel

绑定

https://developer.xamarin.com/guides/xamarin-forms/user-interface/images/

<Image Source="yoururl"  Aspect="AspectFill" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>

答案 3 :(得分:0)

在特殊情况下,您尝试在Android上使用ContentUri(例如content://com.android.contacts/contacts/18/photo),这是必需的咒语:

var uri = Android.Net.Uri.Parse(str);
_companyImage.Source = ImageSource.FromStream(() => Android.App.Application.Context.ContentResolver.OpenInputStream(uri));