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 :

Dépassement de la pile


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2011
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 66
    Par défaut Dépassement de la pile
    Bonjour à tous,

    Je viens vous voir car je rencontre un gros soucis avec mon application qui touchait pourtant au but.

    Il s'agit de la page principale de mon application, qui contient de nombreuses fonctions, autogérées et appelées via des timer. Celles-ci remplissent divers datagridview.

    D'ailleurs au passage quelle est la meilleure méthode pour forcer un composant à se "rafraichir"/redessiner ? Invalidate ? Update? Refresh ?

    Dans tous les cas, j'utilise ces méthodes pour rafraichir mes datagridview et autre panels et voici l'erreur que j'ai :
    Une exception non gérée du type 'System.StackOverflowException' s'est produite dans mscorlib.dll
    L'exception System.StackOverflowException n'a pas été gérée
    Je n'ai pas de boucles infinies ou autre, ou en tout cas je ne pense pas.
    À chaque fois que j'ai cette erreur c'est sur une ligne liée à un rafraichissement : Invalidate/Update/Refresh ou meme Application.DoEvents()

    Peut être que je n'utilise pas ces fonctions au bon moment, je ne sais pas.
    Par exemple j'ai un canvas, avec des pions dedans (powerpacks.ovalshape), dés que je modifie leur position, quelle fonction dois-je appeler pour les redessiner ? (j'ai associé à chaque pion un label et c'est souvent celui ci qui pose problème lors des déplacements, il laisse une "trace".

    Comment résoudre ce problème de dépassement de capacité de la pile ? Demander moins de rafraichissement surement?

    J'espère que vous saurez m'aiguiller pour résoudre ce problème qui met un peu en péril mon projet :s

    Merci d'avance,

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    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 204
    Par défaut
    on est pas sur du web, donc les controles se rafraichissent automatiquement dès que tu changes une propriété
    invalidate et refresh font la même chose je crois, et sont utiles seulement si tu dessines toi même quelque chose sur un controle (drawline et autres)

    les doevents, il faut essayer de s'en passer, ce n'est pas ce qu'il y a de plus propre

    quand au stackoverflowexception, ca veut dire qu'il y a des appels en boucles genre
    A appelle B qui appelle A, qui va donc rappeler B etc... (avec parfois plus de méthodes dans la chaine des appels)
    en débug quand ca se te dit l'erreur tu peux voir le cheminement dans la pile des appels
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    Tout à fait d'accord avec Pol63.

    Citation Envoyé par Pol63 Voir le message
    A appelle B qui appelle A, qui va donc rappeler B etc... (avec parfois plus de méthodes dans la chaine des appels)
    en débug quand ca se te dit l'erreur tu peux voir le cheminement dans la pile des appels
    Je ne sais pas si tu fais du WinForms ou WPF, mais à mon avis c'est tes abonnements à des évènements qui tournent en rond. Je m'explique :

    Tu as deux Textboxes A et B. Tu t'abonnes à TextChanged de la textbox A (ou quelque chose du genre) et idem pour B. Dans le code de l'évènement TextChanged A tu modifies le contenu de B et inversement.
    Ce qui produit que dès que tu changes le texte de A, le texte de B change, mais comme tu as modifié par le code le texte de B, alors tu changes le texte de A etc...

    L'appel explicit à Refresh, Invalidate ou Update etc... est généralement révélateur d'une mauvaise conception.

    Postes nous un morceau de code pour qu'on puisse y voir plus clair et ne pas s'imaginer les problèmes que tu peux rencontrer.

    Bon dev.

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/02/2013, 20h17
  2. Dépassement de pile et Application.ProcessMessages
    Par Bruno13 dans le forum Delphi
    Réponses: 3
    Dernier message: 20/03/2007, 10h35
  3. Récursivité et dépassement de pile...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 17/05/2006, 01h11
  4. [D7] Dépassement de pile à l'impression avec Quick Report
    Par Bigbaloo dans le forum Composants VCL
    Réponses: 8
    Dernier message: 16/03/2005, 00h28

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