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

C# Discussion :

Bug Application .Run


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut Bug Application .Run
    Bonjour à tous,
    J'espère que vous pourrez m'aider parce que ce bug m'inquiète pas mal.
    J'ai codé il y a de cela quelques mois un usercontrol pour mon application (en fonction du bouton sur lequel j'appuie un user control se charge). Tout marchait bien et tout à l'heure j'ai voulu essayer juste pour voir et ça ne marchait plus (j'ai avancé mon projet via de nouveaux user control depuis).

    Celui ci est très compliqué avec de nombreuses fonctions.
    Donc une fonction qui permet de stocker une petite animation dans un fichier xml.
    Je m'explique :
    le fichier xml comporte la position de 5 points à chaque instant pendant 10 secondes. L'utilisateur a la possibilité à chaque instant de choisir un des points et de changer sa position via d'autres fonctions (qui fonctionnaient toutes).

    Donc je clique sur créer, le panel_systeme(qui est par défaut par dessus mon canvas) qui est par défaut à false passe à true(la visibilité). après avoir rentré un nom, je valide.
    Voici les procédures dans la fonction valider:
    -Copier le fichier xml de base
    -Remplir le fichier xml avec les infos rentrées lors de la création (nom, position de départ)
    -Les afficher (avec le contenu de microsoft.powerpacks.ovalshape je crée 5 ronds que j'affiche sur mon image).
    -Enfin le panel_systeme.visible passe à false.


    Je suis passé à seven depuis la dernière fois ou ça marchait. Peut etre que powerpacks.ovalshape n'est pas compatible avec windows 7 ? J'en doute.(j'ai la version 3.0 que je viens de réinstaller pour tester, mais la version 3.0 est sortie en 2008 soit avant seven)
    Ce site propose une version 10.0 que je ne trouve pas sur le site de microsoft, normal ? http://coolthingoftheday.blogspot.co...packs-100.html )
    En tout cas j'ai réinstallé la version 3.0, et un autre user control ou je m'en sers me montre que ça marche parfaitement.
    Le problème est donc ailleurs.


    Alors tout s'execute à priori normalement (j'ai mis un int h=0; à la dernière ligne avec un point d'arret et le déboggueur s'arrete bien). et mon try catch ne renvoie rien.


    Sauf qu'une fois l'exécution de la fonction terminée j'ai un message d'erreur sur mon Application.Run dans Program.cs. Note: Le panel n'est pas caché avant de planter.
    Voici l'erreur:
    L'exception System.ArgumentException n'a pas été gérée
    Message=Le paramètre n'est pas valide.
    Source=System.Drawing
    StackTrace:
    à System.Drawing.Graphics.GetHdc()
    à System.Drawing.BufferedGraphics.RenderInternal(HandleRef refTargetDC, BufferedGraphics buffer)
    à System.Drawing.BufferedGraphics.Render()
    à System.Windows.Forms.Control.WmPaint(Message& m)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.Label.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.DispatchMessageW(MSG& msg)
    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.Run(Form mainForm)
    à BPM2011.Program.Main() dans C:\***\Program.cs:ligne 36
    à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    à System.Threading.ThreadHelper.ThreadStart()
    InnerException:
    On notera que lorsque je clique sur importer pour importer un ancien xml que j'avais créé (et donc qui marchait parfaitement) l'application plante avec un autre message d'erreur dans le catch cette fois.
    Je viens de lancer le programme sans passer par le déboggueur juste en cliquant sur le .exe et quand le message d'erreur apparait, je fais continuer(le panel.visible n'est pas repassé à false) et je clique sur le bouton pour enlever le panel et tout fonctionne parfaitement, tous mes ronds se sont bien affichés sur l'image je peux éditer leur trajectoire etc.
    Alors c'est un problème de mémoire ? trop de mémoire allouée ?


    Ce code marchait parfaitement avant, je ne vois pas d'ou cela peut provenir. Alors si vous pouviez m'aider ou au moins me donner des pistes pour corriger ce type d'erreur (peut etre que dans toute la programmation de mon logiciel ma façon de coder a été mauvaise ce qui cause ce problème). Depuis j'ai du rajouter quelques variables globales, sachant qu'il y a énormément de variables dans cet usercontrol ça peut avoir un lien?
    Aussi si vous aviez des conseils pour m'aider à comprendre ce genre de messages d'erreurs je suis preneur.

    M'aider à résoudre ce problème serait bien plus que de me sauver la vie, c'est la partie la plus importante de mon projet.



    Merci d'avance, r0seBa

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut
    Bonjour à tous, momn problème est toujours d'actualité.

    J'ai pas mal cherché sur internet en ce qui concerne la gestion de la mémoire en c#.
    Et à partir de là deux questions me viennent:

    -Quand utiliser GC.Collect ?
    -Dois-je déclarer mes usercontrol en public moncontrol nomvariable; ou public static moncontrol nomvariable; ? Je dois utiliser static ou pas? Les deux fonctionnnent dans l'exécution mais lequel est le mieux niveau gestion de la mémoire ?

    Sinon mon ancien problème est toujours d'actualité, visiblement c'est un problème liée à la mémoire de system.drawing (le bitmap ?) non ?

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    System.ArgumentException n'a rien à voir avec un problème de mémoire

    as tu des try catch dans la méthode qui plante ? essaye de mettre un handler sur l'évènement UnhandledException pour essayer d'avoir un stacktrace plus explicite ...
    si tu utilises des objets non managés il faut les disposer (bitmap, graphics etc...) sinon ca peut exploser si tu en créés souvent

    un lien vers ton autre problème ? si c'est celui ou tu fais .controls.clear, il ne faut jamais faire controls.Clear si on a plus besoin des controles, mais les diposer tous, sinon dans certains cas tu arrives vite à saturation de la mémoire (OutOfMemoryException)

    un bon programme n'a pas besoin de gc.collect
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut
    Bonjour,

    Merci de ta réponse.

    J'ai bien vérifié il y a des try catch partout dans la fonction qui plante, sans pour autant aller dans le catch. Ce qui est étrange c'est que quand je l'execute sans le débogueur en cliquant sur le .exe quand l'erreur apparait je clique sur continuer et tout marche normalement.

    Bref, je n'arrive pas à mettre d'handler sur l'exception, je m'inspire pourtant de msdn:
    http://msdn.microsoft.com/en-us/libr...=vs.95%29.aspx
    quand je copie de cette manière cela ne fonctionne pas au moment d'ajouter le using Windows, enfin plutot il apparait 101 erreurs d'ambiguité entre System.windows.forms et System.Windows

    Mais si vous me dites que c'est la bonne fonction à coller je corrigerais ces problèmes


    Et sur ce lien :
    http://msdn.microsoft.com/en-us/libr...exception.aspx

    Tout marche avec lui.(en remplaçant console.writeline par un dialogresult = messagebox.show)
    Quand j'exécute j'ai trois messages qui s'affichent "Le paramètre n'est pas valide".

    http://img42.imageshack.us/img42/3217/stacktrace.png

    Rien de bien nouveau quoi à part que ça s'affiche trois fois puis ça plante.


    Merci

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    le premier event d'erreur qui est dans system.windows c'est pour wpf, pas windows forms

    sinon j'ai une autre hypothèse, une image qui a été disposé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim b as new bitmap
    b.dispose
    ungraphics.DrawImage(b) ' cette ligne va planter pour b ne vaut pas Nothing

    et si tu veux tu peux m'envoyer un lien vers la solution en mp
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Par défaut
    Non ça ne semble pas etre ça, je ne dispose pas mon image.
    Je t'envoie le tout par MP.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/09/2006, 13h08
  2. [C#] Application.Run sans Form
    Par papouAlain dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/06/2006, 16h36
  3. [C#]Fenetre de chargement avant Application.run()
    Par 5:35pm dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/05/2006, 03h02
  4. [VBA][EXCEL]Erreur '1004' avec "Application.Run"
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/01/2006, 10h50
  5. Application.run ?
    Par bobymaw dans le forum Langage
    Réponses: 5
    Dernier message: 29/12/2005, 20h21

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