Search code examples
c#windows-phone-7isolatedstorage

How to save images from web in Isolated Storage?


In my application I have list of urls to images. And what I need to do is download this images and save them in Isolated Storage.

What I already have:

using (IsolatedStorageFile localFile = IsolatedStorageFile.GetUserStoreForApplication()) {
...
foreach (var item in MyList)
{
    Uri uri = new Uri(item.url, UriKind.Absolute);

    BitmapImage bitmap = new BitmapImage(uri);
    WriteableBitmap wb = new WriteableBitmap(bitmap);

    using (IsolatedStorageFileStream fs = localFile.CreateFile(GetFileName(item.url)))//escape file name
    {
        wb.SaveJpeg(fs, wb.PixelWidth, wb.PixelHeight, 0, 85);
    }
}
...
}

This code have place inside function in my App.xaml.cs file. I have tried many solutions, in this one the problem is "Invalid cross-thread access".

How can I make it work?


Solution

  • Solution for this problem is:

    foreach (var item in MyList)
    {
        Uri uri = new Uri(item.url, UriKind.Absolute);
        HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;
        request.BeginGetResponse((ar) =>
        {
            var response = request.EndGetResponse(ar);
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                using (var stream = response.GetResponseStream())
                {
                    var name = GetFileName(item.url);
                    if (localFile.FileExists(name))
                    {
                        localFile.DeleteFile(name);
                    }
                    using (IsolatedStorageFileStream fs = localFile.CreateFile(name))
                    {
                        stream.CopyTo(fs);
                    }
                }
            });
        }, null);
    }