2014-09-18 3 views
0

J'utilise le code ci-dessous pour enregistrer une image distante dans Windows Phone 8. Mais je continue à frapper avec System.NotSupportedException: Specified method is not supported. exception à l'appel de méthode SaveJpeg().impossible d'utiliser la méthode SaveJpeg dans Windows Phone 8 (NotSupportedException)

J'ai essayé différentes combinaisons d'appel de méthode (vous pouvez voir la ligne commentée). Je ne pouvais pas comprendre ce que je fais de façon incorrecte.

using (HttpClient client = new HttpClient()) 
{ 
    HttpResponseMessage response = await client.GetAsync(imageUrl); 
    await Task.Run(async() => 
    { 
     if (response.IsSuccessStatusCode) 
     { 
      // save image locally 
      Debug.WriteLine("Downloading image..." + imageName); 

      using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       if (!myIsolatedStorage.DirectoryExists("Images")) 
        myIsolatedStorage.CreateDirectory("Images"); 

       string path = imageName; 
       IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(path); 

       var buffer = await response.Content.ReadAsStreamAsync(); 

       Deployment.Current.Dispatcher.BeginInvoke(() => 
       { 
        BitmapImage bitmap = new BitmapImage { CreateOptions = BitmapCreateOptions.None }; 

        bitmap.SetSource(buffer); 
        WriteableBitmap wb = new WriteableBitmap(bitmap); 

        //System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 100); 

        wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 0, 98); 
       }); 
       fileStream.Close(); 
      } 
     } 
    }); 
} 

Répondre

2

En plaçant le bloc de code dans BeginInvoke vous bloquer appelez le SaveJpeg sur un thread différent (le « thread d'interface utilisateur ») au code qui appelle fileStream.Close().

En effet, cela signifie qu'il est très probable que l'appel à fileStream.Close() sera appelé avant wb.SaveJpeg.

Si vous déplacez le fileStream.Close() dans le bloc BeginInvoke, après wb.SaveJpeg() cela devrait fonctionner.

+0

Ah..got, merci pour l'aide. – Mahender