Bonjour,
Je développe un composant que je teste depuis une application Winform toute simple.
Je référence la DLL dans le projet Winform et j'instancie le composant dynamiquement.
Ce composant redéfinit la méthode Dispose de la manière suivante :
La méthode Close
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 protected override void Dispose(bool disposing) { if (!_disposed) { //Libération des resources non managées Close();//Echoue lorsque Dispose est appelée depuis le finalizeur GC.SuppressFinalize(this); _disposed = true; } }
CAS1:j'appelle la méthode Dispose de mon composant dans l'évènement OnClosing de la Form..pas de problème (cf code ci-dessous)
CAS2:Je ne place aucun appel à Dispose et laisse le GC appeler le destructeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { sess.Dispose();//no soucis !!!! }
Le code rentre bien dans Dispose mais renvoi une erreur que je n'arrive pas à trapper (du type :"l'application machin.exe a rencontré un problème et doit fermer") à l'appel de la méthode Close.
Je peux bien sûr fournir le code de la méthode Close mais en dehors de ça je ne comprends pas quelle est la différence de fonctionnement entre un appel direct à Dispose et un appel de Dispose via un destructeur . Dans les deux cas c'est le même code qui est exécuté non ?!
Partager