[C#] Plantage de l'os à la fermeture de l'application

cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011 - 29 août 2005 à 11:14
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 30 août 2005 à 14:34
Bonjour,
Je m'explique, j'ai une applie qui, à la fermeture - soit par la croix, soit par menu quitter - plante et plante l'os et cela est systématique sous 98, de temps en temps sous 2000 et n'arrive pas sous XP.

quelqu'un aurait-il une idée.

Merci

CedKat

16 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
29 août 2005 à 11:33
Quel traitement fais-tu à la fermeture de ton application ?

Sébastien FERRAND
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
29 août 2005 à 12:06
Bonjour


Voici mon code :


private void frmTracerVin_Closing(object sender,System.ComponentModel.CancelEventArgs e)
{
try
{
TSérialisation.SaveBinaryData(FParamètres,FFilenameParam) ;
mnuEnregistrer_Click(null,null) ;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message) ;
}
}
private void mnuEnregistrer_Click(object sender, System.EventArgs e)
{
this.Cursor = Cursors.WaitCursor ;
if (FFileNameDossier != "") TSérialisation.SaveBinaryData FDossier,FFileNameDossier) ;
this.Cursor = Cursors.Default ;
}


public static void SaveBinaryData(object data, string filename)
{
BinaryFormatter sf = new BinaryFormatter() ;
FileStream fs = new FileStream(filename,FileMode.Create) ;
sf.Serialize(fs,data) ;
fs.Close() ;
}


Voilà. merci

CedKat
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
29 août 2005 à 13:20
déjà, une remarque :
on écrit pas : mnuEnregistrer_Click(null,null) ;
mais : mnuEnregistrer_Click(this, EventArgs.Empty) ;

deuxiemement :
private void frmTracerVin_Closing(object sender,System.ComponentModel.CancelEventArgs e)
{
try
{
TSérialisation.SaveBinaryData(FParamètres,FFilenameParam) ;
mnuEnregistrer_Click(null,null) ;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message) ;
}
}

je coderais de la manière suivante :
private void frmTracerVin_Closing(object sender,System.ComponentModel.CancelEventArgs e)
{
try
{
TSérialisation.SaveBinaryData(FParamètres,FFilenameParam) ;
mnuEnregistrer_Click(this,EventArgs.Empty) ;
e.Cancel = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message) ;
e.Cancel = true;
}
}

Sébastien FERRAND
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
29 août 2005 à 13:42
Bonjour,

Merci pour les infos, mais ça plante toujours. Rien n'est capturé le try catch. La fenètre principal se ferme et là plus rien.

CedKat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
29 août 2005 à 13:58
Troisièmement c'est super moche les variables avec des accents ...

Sinon tu fais tu multithreading ? du socket ? du remoting ? dans ton application ?
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
29 août 2005 à 14:05
Bonjour,
C'est une histoire de gout les accents ...
Pour ce qui est de mon appli, rien de tout ça, c'est juste de la saisie d'info que je sauvegarde par sérialisation.

CedKat
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
29 août 2005 à 14:07
as-tu essayé de mettre des points d'arrêts pour regarder où ca plante ?

Sébastien FERRAND
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
29 août 2005 à 14:30
Je développe sous XP, et dans ce contexte, le problème ne se pose pas. Cela fait planté l'os sous 98 hors pas possible de débugage sous cette platforme.

CedKat
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
29 août 2005 à 14:40
je pense qu'il y a un problème au niveau de la libération des ressources.
essaye de mettre ceci à la fin de SaveBinaryData :

Application.DoEvents();
fs.Dispose(); // NE JAMAIS OUBLIER LE Dispose() ;)
Application.DoEvents();

Sébastien FERRAND
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
29 août 2005 à 20:23
La méthode Close appelle Dispose.
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
30 août 2005 à 08:23
Bonjour

fs est liestream et ne dispose pas de méthode Dispose()

CedKat
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
30 août 2005 à 09:20
ooops... j'avais pas vu qu'elle était protected

sinon, essaye ceci :

public static void SaveBinaryData(object data, string filename)
{
BinaryFormatter sf = new BinaryFormatter() ;
FileStream fs = new FileStream(filename,FileMode.Create) ;
sf.Serialize(fs,data) ;
fs.Close() ;
fs = null;
sf = null;
}

Sébastien FERRAND
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
30 août 2005 à 09:54
Bonjour

Ca ne change rien. Je viens de metre en commentaire ma méthode closing mais ca plant l'os comme même.

CedKat
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
30 août 2005 à 09:56
je pense que l'on ne cherche pas au bon endroit.

as-tu d'autres ressources ouvertes dans ton programme ?
- thread ;
- socket ;
- bref, tout ce qui peut planter...

Sébastien FERRAND
0
cs_cedkat Messages postés 172 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 3 juin 2011
30 août 2005 à 10:01
Tout ce que j'utilise, ce sont des assemblys qui contient des données sérialisées et donc les seul accées externe sont le dossier qui est lui même sérialisée et dont on a regarder la méthode d'enregistrment plus haut.Normalement les assembly doivent être gérer par le framwork. Donc je ne vois pas.!!

CedKat
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
30 août 2005 à 14:34
Petite précision sur Dispose ( .Net 2.0 ), FileStream a une méthode Dispose, elle n'est pas protected mais c'est un membre d'interface explicite. Ca ne change rien mieux vaut appeller Close, mais on comprends mieux pourquoi on peut utiliser using( .. ) { ... } avec un FileStream. ; )

( ( IDisposable )fs ).Dispose( ); // Appel explicite
0
Rejoignez-nous