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 :

Interface winforms fluide.


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut Interface winforms fluide.
    Bonjour,

    Je bosse sur une application winforms, en C# 3.5.
    L'interface est faite par un graphiste, et donc, j'intègre tout un tas d'image dans des pictureBox, dans les boutons ou des panels.
    Je vous laisse imaginer le bazard quand je resize la fenêtre avec la souris...

    Ca scintille dans tous les sens.

    Quelqu'un aurait une solution, ou des pistes où chercher pour améliorer les affichages lourds comme ça?!
    On m'a dit de threader l'interface... mais aucune idée de comment faire ça...

    Merci de votre aide.

    Mathieu

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    ca fait longtemps que j'ai pas vraiment développé, mais je te donne la piste.

    En fait, ce qui est lourd c'est l'interface graphique, c'est a dire toutes tes images.

    Ce que tu fais donc, c'est que tu créé deux thread (regarde comment créer des threads dans l'aide Visual studio, c'est pas compliqué).
    Le premier thread va s'occuper de tous tes controles de ton formulaire (c'est à dire tout ce qui est cliquable, remplissable...).
    Le deuxieme thread s'occupera juste d'afficher les images.

    je sais pas si j'ai été beaucoup plus clair mais voila, bonne chance.

  3. #3
    Membre confirmé
    Profil pro
    Consultant informatique
    Inscrit en
    Juin 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 130
    Par défaut
    Tu peux aussi mettre la propriété doublebuffered à true, mais bon si s'est vraiment lourd ca n'aideras pas forcément beaucoup.

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par mr_keyser Voir le message
    Je vous laisse imaginer le bazard quand je resize la fenêtre avec la souris...

    Ca scintille dans tous les sens.
    Comme toutes les applis. ca dépend si sur le poste la fonctionnalité "voir lafenêtre lors du redimensionnement" est activée (au niveau de l'OS) ou pas. Très peu d'applis se comportent "joliment" dans ce cas (en tous cas ni IE ni firefox par exemple).

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    J'ai déjà mis la propriété doublebuffered , ca change rien.

    Je suis entrain de regarder pour affecter la gestion des images à un thread dédié, mais je galère un peu... Je vois pas trop comment faire.
    Je sais créer un thread, pour effectuer des traitements, mais pour afficher une image, jamais fait...

    Merci de votre aide.

    Mathieu

  6. #6
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    Pratiquement impossible de faire que ca ne clignote pas.
    C'est simple comme principe, ton redimenssionnement a la souris genere un evenement par pixel de deplacement je pense (sauf si tu vas super vite ! )
    Et a chaque evenement, tu demandes de recharger toutes tes images, de les redimenssionner et de les afficher, ce qui est extremement lourd !
    Bref, si c'est moche, ce que tu peux faire, c'est d'afficher seulement le contour de la fenetre quand tu redimenssionne, et raffiche l'appli une fois la souris lache.
    Bon apres je suis pas un expert, donc peut etre il y a un tour de passe-passe pour ca

  7. #7
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Oui je suis d'accord que c'est impossible d'avoir un rendu impeccable, je voulais juste l'améliorer. L'idée d'un thread d'affichage me plaisait bien, mais j'ai du mal pour l'instant, je bosse dessus.

    Merci de votre aide.

    Mathieu

  8. #8
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    Je veux pas casser tes esperances avec les thread, mais le doublebuffered, si je dis pas de betise, c'est le fait d'avoir deux threads qui gerent l'affichage de facon a rendre plus fluide l'affichage. (je passe les details )

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Si c'est la meme chose qu'un double buffer "normal", ce n'est pas une histoire de thread, mais de (hum) double tampon d'ecran, on en prepare un pendant qu'on affiche l'autre (confirmation ?).

    Pour l'OP : Tu peux essayer de stopper le rafraichissement des compos tres lourds pendant le resize (pour ma part, c'est le seul moyen efficace que j'ai trouvé). Abonne toi aux events BeginResize et EndResize, et supprime le rafraichissement des compos en question avec suspendlayout (resumelayout à la fin du resize).

    Bon courage.

  10. #10
    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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    j'ai vu un webcast de microsoft il y a peu, et le développeur de chez microsoft a dit que winforms sert à faire des applis grises et moches
    sinon y a wpf pour faire des trucs jolis

    par contre il a dit aussi que l'éditeur de winforms était quelque chose de fini et il galérait pour mettre 3 lignes de xaml tellement ca a l'air chiant (et que c'est un premier jet pour faire marcher la technologie mais que l'éditeur laisse à désirer)
    d'ailleurs wpf est fait pour etre designé par un designer vu qu'il y a un logiciel annexe (microsoft expression) pour que ca créé le xaml sans se soucier du coté développement
    par contre j'ai jamais testé, donc je sais pas si c'est plus simple que par vs


    ce qui ralenti les winforms, c'est la transparence surtout
    les images c'est faisable encore, les couleurs aussi

    pour les threads, il faut savoir qu'un thread n'a pas accès aux controls (sinon erreur)


    nous avons quand meme réussi à faire une appli graphique en réécrivant les classes de bases (boutons, labels etc...) en utilisant des bufferedgraphics
    les bufferedgraphics permettent de gérer soit meme un affichage hors écran avec un rendu final rapide
    pas trop de scintillement, pendant le resize non plus malgré qu'on ai mis des images sur tous les boutons avec un dégradé de couleur en background stretché
    (on a aussi des synoptiques avec une centaine d'images qui clignotent toutes les demi seconde)
    et les bufferedgraphics peuvent appliquer le rendu depuis un autre thread
    donc faut voir quels sont les controles qui ralentissent ton appli ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    Abonne toi aux events BeginResize et EndResize, et supprime le rafraichissement des compos en question avec suspendlayout (resumelayout à la fin du resize).
    Il me semblait que la méthode SuspendLayout n'avait pas d'influence sur la redessinement d'un contrôle ?

    Citation Envoyé par sperot51 Voir le message
    sinon y a wpf pour faire des trucs jolis
    Il y a toujours le problème de performance...

  12. #12
    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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    suspendlayout permet d'éviter le dessin pendant l'utilisation des propriétés size et location donc pas utile dans ce cas

    wpf est performant, meme pour des effets 3d ou transparence, il utilise directx9
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Il y a beaucoup de monde je pense qui doutent des performances des applications WPF.

  14. #14
    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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    le peu que j'ai testé avec 100 labels avec image qui clignotent ca avait l'air d'aller
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 32
    Par défaut
    Clairement, WPF est bien plus adapté pour faire des applications très graphiques. Tous les effets graphiques sont bien gérés, les images s'intègrent on ne peux mieux et peuvent être vectorisées. Le seul souci de performance qu'on peut rencontrer avec, c'est quand on n'a pas de carte graphique -- ca me rappelle un certain systeme d'exploitation

  16. #16
    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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ^^
    ca c'est bien vrai mais une carte graphique à 40 euros suffit largement donc faut pas s'en priver
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Citation Envoyé par seth78
    Clairement, WPF est bien plus adapté pour faire des applications très graphiques. Tous les effets graphiques sont bien gérés, les images s'intègrent on ne peux mieux et peuvent être vectorisées. Le seul souci de performance qu'on peut rencontrer avec, c'est quand on n'a pas de carte graphique
    +1

    Après pour l'interface de mr_keyser (qui lui est fourni et qui est en Windows Form si j'ai bien compris), je rejoins l'idée de Tober qui simplifie carrément la problématique et qui n'est pas si déroutante que ça au final pour l'utilisateur (je trouve ).

    Idée de Tober :
    Citation Envoyé par Tober
    ce que tu peux faire, c'est d'afficher seulement le contour de la fenetre quand tu redimenssionne, et raffiche l'appli une fois la souris lache.

  18. #18
    Membre Expert Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Par défaut
    Merci de ton soutien
    Personnellement, c'est la maniere la plus propre (et meme jolie je trouve) que tu puisses faire car quoi qu'il arrive, ton appli clignotera forcement, meme un tout petit peu.
    D'ailleurs, cette option est repris par certains OS par defaut si je ne m'abuse

  19. #19
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 103
    Par défaut
    Merci pour vos réponses.

    Effectivement en WPF, il y aurait un bien meilleur rendu, mais pas de bol, je suis en winforms.

    J'ai fait comme Tober et harz62 ont conseillés, à savoir suspendre le rafraichissement pendant le resize... Je verrai bien si ça passe pour le client.

    Merci

  20. #20
    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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    pour info héberger des controles wpf dans une appli winforms n'est pas utile, wpf n'utilise alors plus directx mais le processeur ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. winforms interface c#
    Par spiderams dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/09/2011, 19h35
  2. Demande de conseil pour interface winforms
    Par alexabcinformatique dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/08/2010, 10h00
  3. [ZF 1.10] Interface fluide avec Zend_Db_Table_Abstract ?
    Par Halleck dans le forum Zend Framework
    Réponses: 4
    Dernier message: 02/06/2010, 19h14
  4. Réponses: 4
    Dernier message: 14/02/2008, 17h40

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