IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Impossible d'écrire dans un TextWriter fermé


Sujet :

Silverlight

  1. #1
    Membre confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Décembre 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Décembre 2010
    Messages : 126
    Par défaut Impossible d'écrire dans un TextWriter fermé
    Bonjour
    J'ai le code suivant qui me permet de construire un isolated storage contenant des données XML representant des champs de certaines table de ma base de donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    MonContext _context = new MonContext();
     
                try
                {
                    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        string directory = "Key";
                        store.CreateDirectory(directory);
                        string filePath = System.IO.Path.Combine(directory, "Key.txt"); //On concatène le nom du fichier et du dossier
     
                        if (!store.FileExists(filePath)) //On vérifie que le fichier n'existe pas déja
                        {
                            IsolatedStorageFileStream File =
                            store.CreateFile(System.IO.Path.Combine(directory, "Key.txt")); //On créé le fichier
                            File.Close(); //On ferme le stream
                        }
     
                        //debut try using streamWriter
                        try
                        {
                            using (StreamWriter sw =
                                new StreamWriter(store.OpenFile(filePath,
                                    FileMode.Open, FileAccess.Write)))
                            {
                                //Debut récupération de la table ModeInterChange et ecriture dans l'isolated sptorage en XML
                                _context.Load(_context.GetModeInterChangeQuery());
                                _context.Load(_context.GetModeInterChangeQuery()).Completed += (sender, args) =>
                                    {
                                        try
                                        {
                                            XElement ModeInterChanges = new XElement("ModeInterChanges");
                                            foreach (ModeInterChange modeinter in _context.ModeInterChanges)
                                            {
                                                ModeInterChanges.Add(new XElement("LabelModeInterChange", modeinter.LabelModeInterChange));
                                            }
                                            sw.WriteLine(ModeInterChanges);                                        
                                        }
                                        catch (Exception exModeInterchange)
                                        {
                                            MessageBox.Show(exModeInterchange.ToString());
                                        }
     
                                    };
                                //Fin récupération de la table ModeInterChange et ecriture dans l'isolated sptorage en XML
     
                                //Debut récupération de la table typeGestionPortefeuille et ecriture dans l'isolated sptorage en XML
                                _context.Load(_context.GetTypeGestionPortefeuilleQuery());
                                _context.Load(_context.GetTypeGestionPortefeuilleQuery()).Completed += (sender, args) =>
                                    {
                                        try
                                        {
                                            XElement typeGestionPortefeuille = new XElement("typeGestionPortefeuille");
                                            foreach (TypeGestionPortefeuille ObjecttypeGestionPortefeuille in _context.TypeGestionPortefeuilles)
                                            {
                                                typeGestionPortefeuille.Add(new XElement("LabelTypeGestionPortefeuille", ObjecttypeGestionPortefeuille.LabelTypeGestionPortefeuille));
                                            }                                        
                                            sw.WriteLine(typeGestionPortefeuille);
                                        }
                                        catch (Exception exTypeGestionPertefeuille)
                                        {
                                            MessageBox.Show(exTypeGestionPertefeuille.ToString());
                                        }
                                    };
                                //Fin récupération de la table typeGestionPortefeuille et ecriture dans l'isolated sptorage en XML
     
     
     
     
                            } //Fin du using StreamWriter
                        }
                        catch (IsolatedStorageException ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
     
     
                    }//Fin using store general
     
                }
                catch(Exception exStore)
                {
                    MessageBox.Show(exStore.Message);
                }
    Cepedant à l'execution du code et comme j'ai bien pris le soin de mettre des catch sur mes exception, le premier et le 2 eme catch me renvoie l'erreur suivante :

    System.ObjectDisposedException : Impossible d'écrire dans un TextWriter fermé
    pourtant j'ai bien pris le soin de mettre mon StreamWriter dans un using encapsulé par un blog try catch !!!

    Vous avez une idée pour résoudre ce bug ?

    Merci d'avance de votre attention

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le WriteLine est fait dans une méthode anonyme, qui est exécutée quand l'évènement Completed se produit. Mais tu ne sais pas quand cet évènement va se produire... s'il se produit après que tu sois sorti du bloc using, le StreamWriter aura déjà été refermé (c'est apparemment ce qui se produit dans ton cas). Donc à mon avis il faut que tu ouvres le StreamWriter dans le handler de l'évènement, et non en dehors

  3. #3
    Membre confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Décembre 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Décembre 2010
    Messages : 126
    Par défaut
    merci tomlev de ta réponse. Au faite j'ai contourné le probleme, je n'utilise plus un seul using de StreamWriter mais à chaque evenement load completed je déclare un using StreamWriter et je défini le "fileMode" à append quand le completed n'est pas le premier à s'executer et a "create" quand c'est le premier ccompleted à s'achever
    J'ai introduit un semaphore (boolean) que j'initialise à true à la fin d'un evenement load completed

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible d'écrire dans un formulaire ou requete
    Par julie75 dans le forum Access
    Réponses: 12
    Dernier message: 28/03/2013, 15h56
  2. Impossible d'écrire dans un fichier
    Par laurentUTC dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/04/2007, 12h18
  3. Impossible d'écrire dans lib
    Par manson888 dans le forum Mandriva / Mageia
    Réponses: 32
    Dernier message: 14/02/2007, 21h28
  4. Impossible d'écrire dans une classe
    Par NoiBe dans le forum NetBeans
    Réponses: 1
    Dernier message: 28/12/2006, 16h33
  5. Réponses: 1
    Dernier message: 01/12/2005, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo