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

Windows Forms Discussion :

Problème de refresh dans une application modulaire


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 54
    Points
    54
    Par défaut Problème de refresh dans une application modulaire
    Hello,

    J'ai un problème de refresh sur des fenêtres... :

    (EDIT) ATTENTION: Voir mon message plus bas qui explique que l'erreur n'est pas lié à l'utilisation de module ! Le problème est finalement beaucoup plus simple !


    Mon application est basée sur des modules chargés dynamiquement et dont les classes sont instanciées via AppDomain.CreateInstance(). Ces modules permettent entre autre l'affichage d'une fenêtre. Ensuite, c'est mon application principale qui fait des appels à ces instances et ces dernières
    prennent en charge l'affichage de leurs fenêtres respectives.

    Une façon de faire surgir le problème que je rencontre est de faire en sorte de locker ma session (touche windows + L), et que pendant ce temps l'application affiche une de ces fenêtres. Quand je delock ma session, je peux voir la fenêtre, mais celle-ci n'est pas à jour, en gros il y a juste le contour...

    Je ne sais pas si c'est clair, mais je pense que certains comprendront et auront la réponse Si vous avez des bonnes pratiques sur ce type de problématique, je suis également preneur !

    Merci beaucoup

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Il faudrait peut-être voir pour appeller l'évènement Paint de temps en temps, histoire de forcer l'affichage ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    J'ai à peu près épuisé toutes les possibilités à ce niveau là :

    _window.Update();
    _window.PerformLayout();
    _window.Invalidate();
    _window.Activate();

    Le Paint() est un event, je sais pas comment l'invoquer directement... une idée ? A noter que le seul moment où j'ai le problème, c'est surtout quand je suis en mode locked... et quand je reviens, le refresh ne se fait pas...

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    tu fait un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.Invalidate();
    dans tes forms
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    C'est justement ce que j'ai déjà fait. Mais ma form ne semble pas réagir à tout ça quand la session est lockée. Il y aurait bien une solution, de se hooker sur le lockage / délockage de session, ça me ferait utiliser l'api win32, mais bon après moins de portabilité, etc, et je suis sûr qu'il y a une solution plus propre et directe...

  6. #6
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Salut,

    Tu peux utiliser le bon vieux Application.doEvent() qui force windows à vider sa Messages queue.

    Ludovic,
    Envie de contribuer à la rubrique SharePoint ? Contactez moi par MP !

    SharePoint : http://sharepoint.developpez.com
    Mon site : http://lefortludovic.developpez.com
    Mon blog : http://www.consultpoint.net/blog

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Salut,

    est-ce que la(les) méthode(s) qui affichent les fenêtres sont appelées par le thread principal ? Si ce n'est pas le cas, essaie de récupérer les objets Form (ou hérités) créés par tes modules, mais en les affichant par le thread qui a lancé le programme. Si c'est compliqué selon la manière dont est faite l'appli, essaie avec des délégués.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    DoEvent() j'ai déjà essayé mais il ne fait rien non plus.
    Je ne créé pas de threads nulle part, donc ... tout se trouve sur le thread principal. C'est pour ça que je ne comprends pas d'où vient le problème :/ ... Je pensais que ça serait plus évident

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 54
    Points
    54
    Par défaut
    Je suis revenu sur le problème récemment. N'ayant toujours pas trouver de solution, j'ai essayé de reproduire le problème dans le projet le plus petit possible ! Et il se trouve que le problème est causé par le fait que cette fenêtre que j'affiche en popup a une opacité qui n'est pas de 100% ! Si je met une opacité de 100% je ne rencontre plus le problème.

    Ce n'est pas pour ça que j'ai trouvé une solution ... voici donc l'adresse du petit projet :
    http://www.meow.fr/download/TestWindow.rar

    Compilez, démarrez, ça va afficher à partir d'une fenêtre normale une autre popup à intervalle régulier. Il faut cliquer sur cet popup pour qu'elle se ferme. Elle affiche aussi une valeur qui s'incrémente. --> Maintenant, après avoir cliqué (et donc fermé) la popup, faites vite un CONTROL + L pour locker la session. Après un relog, vous verrez que cet popup ne s'est pas mise à jour cette fois ! ...

    Si quelqu'un trouve la solution je suis preneur... en évitant d'utiliser des techniques douteuses genre plusieurs Refresh d'affilé, des Hide Show consécutif, de l'interop... j'aimerais connaître une méthode propre pour l'afficher bien.

    Merci beaucoup

Discussions similaires

  1. Problème de package dans une application console
    Par Patrick Seuret dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/11/2010, 18h18
  2. problème d'authentification dans une application windows
    Par meryDev dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/07/2009, 17h05
  3. Problème d'affichage dans une application
    Par altaruk dans le forum Débuter
    Réponses: 3
    Dernier message: 26/01/2008, 18h32
  4. problème de socket dans une application win32
    Par deck_bsd dans le forum Windows
    Réponses: 5
    Dernier message: 20/01/2007, 18h32
  5. Problème de refresh dans une JTable
    Par vano dans le forum Composants
    Réponses: 3
    Dernier message: 04/05/2006, 14h57

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