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 :
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;
    }
  }
La méthode Close

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)
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 !!!!
}
CAS2:Je ne place aucun appel à Dispose et laisse le GC appeler le destructeur.
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 ?!