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;
}
}
}
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
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez souligné vous-même, la
ImageTypeCheck.getImageType
méthode est la fermeture de la flux de.Comment avez-vous été censé trouver le problème?
ImageTools.IO.Gif.GifDecoder.Decode
a été appelé lorsque l'erreur a été levée. Donc il s'est passé avant que.ImageTypeCheck.getImageType
Pour résoudre le problème, il suffit de retirer le
stream.Close
de laImageTypeCheck.getImageType
méthode, et de le remplacer par unSeek
pour revenir au début du flux (le GifDecoder s'attend à ce que le flux soit positionné au début de la photo).un peu plus creuser, Fait-il dire à chaque fois que je utiliser un jet, la Position du flux sera modifié et enregistré, à moins que j'ai fermer le flux de données ou de l'utilisation de méthode de recherche. et si vous ne fermez pas ou chercher, suivant un qui a lu le flux commence à ce poste précédent?
Exactement. C'est la façon dont les flux de travail.
OriginalL'auteur Kevin Gosse