Pourquoi il jette toujours un ObjectDisposedException?

En raison du fait que windows phone ne peut pas gérer gif, j'écris un peu de méthode, mais il semble qu'il y a une petite erreur.

Le code ci-dessous jette toujours une exception lorsqu'il s'exécute (JPG et PNG partie)bitimg.SetSource(e.Result);
Comme il l'a dit, ça veut dire que je ne peux pas utiliser le courrier.Résultat parce qu'il est disposé? Mais comment cela pourrait-il arriver, la méthode n'a pas arrêter, pourquoi le compilateur de la jeter?

Pourquoi et comment le résoudre?

Erreur Info:

{Système.ObjectDisposedException: Impossible d'accéder à un objet supprimé.
Nom de l'objet: 'MME Internes.InternalMemoryStream'. au
MME Internes.InternalMemoryStream.Seek(Int64 offset, SeekOrigin origine)
au ImageTools.IO.Gif.GifDecoder.Décoder(ExtendedImage image, Flux
stream) à
xicihutong.ViewModel.RichTextBoxBindingBehavior.<>c__DisplayClass7.b__4(Objet
s, OpenReadCompletedEventArgs e) à
Système.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
au Système.Net.WebClient.OpenReadOperationCompleted(Object arg)}

image.Loaded += (s1, e1) =>
{
WebClient wc = new WebClient();
wc.AllowReadStreamBuffering = true;
wc.OpenReadCompleted += (s, e) =>
{
if (e.Error == null && !e.Cancelled)
{
//Check the type of the Image
ImageTypeCheck.ImageType incomingIMGType = ImageTypeCheck.getImageType(e.Result);
BitmapImage bitimg = new BitmapImage();
bitimg.CreateOptions = BitmapCreateOptions.BackgroundCreation;
switch (incomingIMGType)
{
//handle GIF for windows phone
case ImageTypeCheck.ImageType.Gif:
Decoders.AddDecoder<GifDecoder>();
Encoders.AddEncoder<JpegEncoder>();
GifDecoder gif = new GifDecoder();
JpegEncoder jpg = new JpegEncoder();
ImageTools.ExtendedImage extImg = new ImageTools.ExtendedImage();
gif.Decode(extImg, e.Result);
using (MemoryStream stream = new MemoryStream())
{
jpg.Encode(extImg, stream);
bitimg.SetSource(stream);
image.Source = bitimg;
}
break;
case ImageTypeCheck.ImageType.Bmp:
case ImageTypeCheck.ImageType.Null:
break;
case ImageTypeCheck.ImageType.Jpg:
case ImageTypeCheck.ImageType.Png:
try
{
bitimg.SetSource(e.Result);
image.Source = bitimg;
}
catch (Exception ex)
{
App.print(ex.Message);
}
break;
}
}
};
wc.OpenReadAsync(new Uri(item, UriKind.Absolute), wc);

}

==================================

using System.IO;
namespace xicihutong.DataServiceAgent
{
class ImageTypeCheck
{
///<summary>
///define
///</summary>
public enum ImageType
{
Null,Png,Jpg,Gif,Bmp
}
public static ImageType getImageType(Stream stream)
{
ImageType type = ImageType.Null;
byte[] header = new byte[8];
stream.Read(header, 0, 8);
//Check if PNG then do something;
//Check if JPG then do something;
//Check if GIF then do something;
stream.Close();
return type;
}
}
}
Où puis-GifDecoder et JpegEncoder venir?
Je sais que cela n'a rien à voir avec la réponse. Mais pourquoi ne pas vous rendre votre code plus lisible? Ce sera certainement une aide les gens à contribuer qu'ils sautent.
ils en sont la méthode d'assistance de ImageTools
Pourrais-tu montrer le code de la ImageTypeCheck.getImageType méthode? Il semble très probable que cette méthode est la fermeture de la stream.
désolé, édité!

OriginalL'auteur Albert Gao | 2013-05-30