Search code examples
c#windows-phonewindows-phone-8.1windows-8.1portable-class-library

How do I use the new HttpClient from Windows.Web.Http to download an image?


Using Windows.Web.Http.HttpClient how can I download an image? I would like use this HttpClient because it is available to use in portable class libraries.


Solution

  • This is what I eventually came up with. There is not much documentation around Windows.Web.Http.HttpClient and a lot of the examples online use old mechanisms like ReadAllBytesAsync which are not available with this HttpClient.

    I should note that this question from MSDN helped me out a lot, so thanks to that person. As the comment over there states, this guy must be the only person in the world who knows about Windows.Web.Http!

    using System;
    using System.Diagnostics;
    using System.IO;
    using System.Net;
    using System.Threading.Tasks;
    using System.Windows.Media.Imaging;
    using Windows.Storage.Streams;
    using Windows.Web.Http;
    
    public class ImageLoader
    {
        public async static Task<BitmapImage> LoadImage(Uri uri)
        {
            BitmapImage bitmapImage = new BitmapImage();
    
            try
            {
                using (HttpClient client = new HttpClient())
                {
                    using (var response = await client.GetAsync(uri))
                    {
                        response.EnsureSuccessStatusCode();
    
                        using (IInputStream inputStream = await response.Content.ReadAsInputStreamAsync())
                        {
                            bitmapImage.SetSource(inputStream.AsStreamForRead());
                        }
                    }
                }
                return bitmapImage;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Failed to load the image: {0}", ex.Message);
            }
    
            return null;
        }
    }