Jak usunąc migające linie przy refreshu/Invalidate

0

Witam mam pewien problem, ponieważ gdy stworzyłem siatkę miałem problem z pewnymi deformacjami, które tworzyły mi się podczas scrolowania, ale naprawiłem to za pomocą komendy

panel1.Invalidate();

i wszystko działa dobrze, ale podczas ciągłego przerysowywania siatki te linie ciągle migają i teraz mam tutaj pytanie, czy jest może jakiś sposób, żeby siatka odświeżała się, ale bez tego ciągłego migania ?

Poniżej podaje kod siatki i sposób jej odświeżania.

Siatka

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Pen p = new Pen(Color.Black);
            p.Width = 2;

            for (int y = 0; y < panel1.Width; y += 135)
            {
                e.Graphics.DrawLine(p, panel1.Width, y, 0, y);
            }

            for (int x = 0; x < panel1.Width; x += 100)
            {
                e.Graphics.DrawLine(p, x, panel1.Width, x, 0);
            }
        }

Odświeżanie siatki

        private void timer1_Tick(object sender, EventArgs e)
        {
            panel1.Invalidate();
        }
3

i wszystko działa dobrze, ale podczas ciągłego przerysowywania siatki te linie ciągle migają i teraz mam tutaj pytanie, czy jest może jakiś sposób, żeby siatka odświeżała się, ale bez tego ciągłego migania ?

W jaki sposób migają? 2 rozwiązania mi przychodzą:

  • V-Sync (synchronizacja pionowa), zobacz sobie w necie, jakie to problemy rozwiązuje i czy masz takie problemy
  • podwójny bufor / double buffering/back buffer (w sytuacji jeśli byś co chwila zmazywał obraz i rysował od nowa, to lepiej mogłoby rysować nowy obraz w pamięci i tylko podmieniać)

(tak ogólnie się wypowiadam, na podstawie tego, z czym sam miałem problemy kiedyś, tylko, że akurat nie w C#. Ale możliwe, że właściwe tutaj rozwiązanie jest jeszcze inne).

1

Bardzo dziękuję za pomoc odpowiedzią na ciągłe "miganie" siatki okazał się double buffering.

1 użytkowników online, w tym zalogowanych: 0, gości: 1