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

VB.NET Discussion :

Problème ObjectDisposedException introuvable


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut Problème ObjectDisposedException introuvable
    Bonjour,

    J'obtiens une ObjectDisposedException que je ne parviens pas à enlever

    J'ai un UserControl représentant une fenêtre dans un environnement "MDI" (que j'ai recrée moi même pour avoir des fonctionnalités en plus comme le docking de mes fenêtres).

    Cela ce produit au moment où je ferme ma "fenetre", mais je ne trouve pas l'endroit exacte..

    Voici le message d'erreur:
    Impossible d'accéder à un objet supprimé.
    Nom de l'objet : 'Panel'.
    Le StackTrace:
    à System.Windows.Forms.Control.CreateHandle()
    à System.Windows.Forms.Control.get_Handle()
    à System.Windows.Forms.ContainerControl.FocusActiveControlInternal()
    à System.Windows.Forms.Form.set_Active(Boolean value)
    à System.Windows.Forms.Form.WmActivate(Message& m)
    à System.Windows.Forms.Form.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    à System.Windows.Forms.UnsafeNativeMethods.IntDestroyWindow(HandleRef hWnd)
    à System.Windows.Forms.UnsafeNativeMethods.DestroyWindow(HandleRef hWnd)
    à System.Windows.Forms.NativeWindow.DestroyHandle()
    à System.Windows.Forms.Control.DestroyHandle()
    Le procédé que j'applique pour fermer ma fenêtre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub PictureBoxClose_Click(sender As System.Object, e As System.EventArgs) Handles PictureBoxClose.Click
            Me.Close()
        End Sub
     
        Public Sub Close()
            Dim wch As New WindowClosingEventArgs
            RaiseEvent WindowClosing(Me, wch)
     
            If Not wch.Cancel Then
                Me.Dispose()
            End If
        End Sub
    Sans dire de résoudre ce problème, j'espère que vous pouvez m'aider à trouver où cela peut se produire..

    Merci

    EDIT: Surtout que cela ne se produit pas à chaque fois :/

  2. #2
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    J'ai peut être trouvé une solution en copiant/collant le stacktrace dans mon ami => ici

    L'auteur du 2ème message à l'air confiant et propose un code C# qui, une fois convertit donnerait ça:
    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
    Private Shared Sub Main()
    	Application.ThreadException += New System.Threading.ThreadExceptionEventHandler(AddressOf Application_ThreadException)
    	AppDomain.CurrentDomain.UnhandledException += New UnhandledExceptionEventHandler(AddressOf CurrentDomain_UnhandledException)
     
    	Application.Run(New MainForm())
    End Sub
     
    Private Shared Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs)
    	' Handle exception
    	Application.[Exit]()
    End Sub
     
    Private Shared Sub Application_ThreadException(sender As Object, e As System.Threading.ThreadExceptionEventArgs)
    	' Handle exception
    	Application.[Exit]()
    End Sub
    Seulement je ne sais pas quoi en faire.. en essayant de l'adapter, VB me dit entre autre que Application.ThreadException est un évènement est que son utilisation ne correspond pas.. et les Application.Exit me paraissent pas trop adaptés à ce que je veux faire car je ne veux pas que mon appli se ferme quand l'exception survient

    De plus, en essayant de comprendre ce bout de code on dirait que ça permet d'outre passer l'erreur sans la résoudre.. mais bon si y a que ça..

  3. #3
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Bon alors j'ai essayé en rajoutant ces lignes dans le constructeur de mon form principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            AddHandler Application.ThreadException, AddressOf Application_ThreadException
            AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException
    Apparemment ça déclenche une AppDomain.CurrentDomain.UnhandledException..

    Je continue de chercher..

    EDIT:

    Bon apparemment je fais fausse route:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs)
            Dim ex As Exception = DirectCast(e.ExceptionObject, Exception)
     
        End Sub
    Ca permet seulement de "catcher" l'exception non gérée (hors Try/Catch) mais elle se déclenche quand même..

    Personne n'a d'idée??

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    il faudrait voir ton code

    le principe de cette exception, c'est que sur les objets disposables, une fois la méthode dispose appelée, les 3/4 des méthodes ne fonctionnent plus, et les appeler déclenche l'erreur
    ca voudrait dire que tu as une référence vers cet objet quelque part et que tu tentes de l'utiliser
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il faudrait voir ton code
    Oui c'est ce que je me dis mais le problème est que l'erreur peut venir d'un tas d'endroit dans le projet.. J'ai des objets WindowArea, WindowContainer, WindowPainter, etc. J'ai des timers un peu partout..

    Je vois bien la raison pour laquelle cette exception apparaît sauf que je ne sait pas où chercher tellement il y a de possibilités

    Bref je pense que je vais devoir balayer l'ensemble de mon code et rajouter des try/catch un peu partout au hasard (ou presque..).

    On va dire que j'ai la solution à mon problème..

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    l'utilité de maitriser la POO c'est de pouvoir cloisonner le code
    wpf ajoute la possibilité de différencier totalement l'interface du code
    car avoir une classe manipulée par beaucoup d'autres c'est moins simple à débugger ^^


    concernant les try catch, certains en mettent dans toutes les sub, avec rapport créé dans le catch, par contre je ne sais pas si tu auras plus de détails, la pile d'appels devrait etre la même surtout si tu as testé avec unhandledexception
    on dirait que le .dispose fait qu'un autre controle/form devient actif, et que ca plante à ce niveau (tu as du code sur l'event activated peut etre ?)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Problème dll introuvable de VTK en Netbeans
    Par dot-_-net dans le forum NetBeans
    Réponses: 0
    Dernier message: 19/01/2011, 12h20
  2. Problème applet introuvable
    Par chris07 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 12/06/2009, 10h05
  3. [VBA-E]problème "fichier introuvable"
    Par lapa-jh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/06/2007, 15h05
  4. [GD] Probléme fonctions introuvables
    Par Cazman dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/09/2006, 16h25
  5. Problème: Erreur introuvable.
    Par FOX19881 dans le forum C
    Réponses: 5
    Dernier message: 26/07/2006, 17h20

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