Winforms: SuspendLayout/ResumeLayout n'est pas assez?

J'ai une bibliothèque de quelques "commandes personnalisées". Essentiellement, nous avons nos propres boutons, rond coin panneaux, et quelques groupboxes avec certains de peinture personnalisée. Malgré les "mathématiques" dans la OnPaint méthodes, les contrôles sont assez standard. La plupart du temps, tout ce que nous faisons est d'attirer les coins arrondis et ajouter un dégradé à l'arrière-plan. Nous utilisons GDI+ pour toutes que.

Ces contrôles sont ok (et très agréable à regarder en fonction de nos clients), cependant, et en dépit de la DoubleBuffer, vous pouvez voir quelques-uns de redessiner, surtout quand il y a 20++ boutons (par exemple) sur le même formulaire. Sur le formulaire de charge de vous afficher les boutons de dessin... ce qui est ennuyeux.

Je suis assez sûr que nos boutons ne sont pas la chose la plus rapide sur terre, mais ma question est: si la double mémoire tampon est "sur", ne devrait-on pas tout ce que de redessiner arriver dans le fond et le sous-système Windows doit afficher les résultats "instantanément" ?

D'autre part, s'il y a "complexe" boucle foreach qui permettra de créer des étiquettes, de les ajouter à un groupe (double tampon) et de modifier leurs propriétés, si nous suspendlayout du panneau avant de la boucle et reprendre la mise en page du panneau quand la boucle est terminée, ne devrait pas l'ensemble de ces contrôles (boutons) apparaissent "presque instantanément"? Cela ne se fait pas comme ça, vous pouvez voir le panneau rempli.

Une idée de pourquoi cela ne se produit pas? Je sais que c'est difficile à évaluer sans exemple de code, mais c'est difficile à reproduire, aussi. Je pourrais faire une vidéo avec un appareil photo, mais croyez-moi sur ce point, il n'est pas rapide 🙂

  • Vous devriez également essayer de suspension/reprise de redessiner les opérations de...voir mon jour de réponse.
  • Vous avez certainement un problème de performance. Je ne pense pas que le dessin des dégradés et des quarts de cercle doit être lent.
  • Eh bien, comme je l'ai dit à la bibliothèque d'INTERFACE utilisateur n'est pas le plus rapide, mais nous avons aussi beaucoup de GDI+ code de dessin à faire sur le bouton rechercher, comme nous le voulons regarder. Ce n'est pas seulement un tirage au sort.arc x 4 et peindre la surface avec un Dégradé. Je suppose que nous allons devoir travailler sur ça aussi... mais je me demandais si il y avait un moyen de l'accélérer. Si il double tampons, il doit afficher rapidement quand il "bascule", n'est-ce pas?
  • Je suis toujours en train d'enquêter sur la question, seront bientôt. Merci pour les idées jusqu'à présent.