J'ai ce code pour dessiner des rectangles dans ImageBox un par un.

        g = Graphics.FromImage(pictureBox1.Image);
        int size = 40;
        int squares = 0;

        for (int H = 0; H < 1490; H += size)
        {
            for (int W = 0; W < 1490; W += size)
            {
                var rectangle = new Rectangle(W, H, size, size);
                g.DrawRectangle(new Pen(Color.Green, 3), rectangle);
                this.Refresh();
                squares++;
                label1.Text = squares.ToString();
            }
        }

Dans Visual Studio, tout fonctionne comme il se doit, mais lorsque je construis, cela fonctionne pour les 300 premiers rectangles ~, puis retarde et se termine instantanément.

Je pense que Refresh () cesse de fonctionner.

0
PsyChonek 26 févr. 2021 à 16:36

1 réponse

Meilleure réponse

Utilisation de Refresh (); est lent et inefficace. Utilisez plutôt quelque chose pictureBox1.Image = pictureBox1.Image ;. J'ai utilisé StopWatch avec la boucle while pour attendre quelques ms pour ralentir la boucle et définir un intervalle fixe même si la boucle prend plus de temps que les autres.

Merci @jdweng (bon point) et @TaW (beaucoup de bonnes informations).

0
PsyChonek 27 févr. 2021 à 13:15