Question

J'essaie de résoudre un problème dans mon application. Je développe l'application dans Vista et cela fonctionne bien là-bas, mais lorsque je l'emmène à XP, le formulaire devient lent et insensible. Lorsque je regarde les messages Windows en utilisant des points d'arrêt, je trouve que dans XP, le formulaire est peint à plusieurs reprises une fois par seconde (même si elle n'a pas vraiment besoin); Cependant, le même test sur Vista ne montre pas cette peinture répétitive.

Des idées quant à ce qui pourrait en être causé?

Était-ce utile?

La solution

Merci pour la contribution de tous. Le problème a été résolu maintenant, avec l'aide de Subversion! La lenteur de la fenêtre était un problème relativement nouveau, j'ai donc décidé de regarder en arrière dans le temps dans mon code source à l'aide de Subversion et j'ai découvert que j'ai récemment appliqué le drapeau de style WS_EX_COMPOSITED à la forme pour réduire le scintillement de Vista.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams result = base.CreateParams;
        result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
        return result;
    }
}

Lorsque je l'ai commenté, le formulaire était à nouveau réactif dans XP et les messages répétitifs WM_Paint avaient disparu. Ainsi, la solution consistait à appliquer WS_EX_COMPOSITED dans Vista ou ultérieurement.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams result = base.CreateParams;
        if (Environment.OSVersion.Platform == PlatformID.Win32NT 
            && Environment.OSVersion.Version.Major >= 6)
        {
            result.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
        }

        return result;
    }
}

Maintenant, tout fonctionne très bien!

Autres conseils

Sans voir le code spécifique, etc., je n'ai aucune idée de votre problème spécifique, mais la peinture de fenêtre dans Vista est radicalement différente en raison du gestionnaire de fenêtres de bureau (DWM). L'image de chaque fenêtre est en fait en cache / double tampon en raison de l'effet de composition et vous ne verrez donc pas le scintillement de repeindre.

Je vous suggère de vous concentrer sur la résolution du problème sur XP car c'est évidemment un problème que le DWM masque sur Vista.

Quelque chose provoque une partie ou la totalité de votre fenêtre invalidé.

Comme @Jon a dit pas beaucoup de détails, mais voici quelques choses à rechercher:

  1. Avez-vous une logique de peinture personnalisée? Décris le.
  2. Y a-t-il des minuteries dans votre code? Que font-ils?
  3. Le scintillement ne se produit-il que lorsque le programme est utilisé, ou aussi lorsque vos mains sont hors de l'ordinateur et regardent simplement?
  4. Utilisez-vous simplement des contrôles .NET standard ou des bibliothèques de contrôle / contrôles utilisateur?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top