UIImage cargado desde URL en Xamarin / C #

Han pasado 4 años desde que esta pregunta ha sido respondida con esta publicación de blog .

¿Hay una forma estándar de crear un UIImage con una image de una URL? Algo como:

UIImage image = UIImage.FromFile("http://foo.com/bar.jpg"); 

Siento que probablemente me falte algo realmente simple.

No es un solo trazador de líneas, pero con muy pocas líneas puedes rodar el tuyo. P.ej

 static UIImage FromUrl (string uri) { using (var url = new NSUrl (uri)) using (var data = NSData.FromUrl (url)) return UIImage.LoadFromData (data); } 

Las llamadas, incluida la de UIImage , son seguras para subprocesss.

Con la nueva asistencia de espera / asíncrona, puede hacer lo siguiente:

 public async Task<UIImage> LoadImage (string imageUrl) { var httpClient = new HttpClient(); Task<byte[]> contentsTask = httpClient.GetByteArrayAsync (imageUrl); // await! control returns to the caller and the task continues to run on another thread var contents = await contentsTask; // load from bytes return UIImage.LoadFromData (NSData.FromArray (contents)); } 

y llamas esto con:

 someYourUIImageObjectOnUI.Image = await this.LoadImage ("some image url"); 

Desea asegurarse de cargar la image asincrónica para que no bloquee su subprocess de interfaz de usuario. MonoTouch.Dialog incluye una class ImageLoader (ver sección 5.3) que podría usar.

También hay un par de variaciones de UrlImageStore disponibles para ayudar con imágenes de carga asíncronas.

Finalmente, si quieres hacerlo manualmente, hay una receta de Xamarin que puedes usar.

Probé lo anterior, parece una gran idea, pero obtengo: No se puede convertir implícitamente el tipo System.Threading.Tasks.Task<MonoTouch.UIKit.UIImage>' to Monotouch.UIKit.UIImage'

[Encontré una solución] El problema fue porque el
obj.Image = aguarde esto.LoadImage (imageUrl) también debe estar en un método marcado async. ¡Entonces funciona!

Gracias