Jak naprawić migotanie panelu podczas przerysowywania?

Mam panel, który subklasowałem i ustawiłemDoubleBuffered prawda, ciągle muszę odświeżać rysunek, ale migocze i nie mam pojęcia dlaczego.

private delegate void MyDelegate();

public void heartBeat()
    {
        while (true)
        {
            if (map.processNubots(rules))
            {
                if (this.InvokeRequired)
                {
                    this.Invoke((MyDelegate)delegate
                    {
                        //drawPanel.SuspendLayout();
                        drawPanel.Refresh();
                        displayGrid();
                        //drawPanel.ResumeLayout();
                    });
                }
                Thread.Sleep(500);
            }
            else
            {
                break;
            }
        }
    }

    public void displayGrid()
    {
        int i = 0;
        foreach (DictionaryEntry pair in map)
        {
            Monomer current = (Monomer)pair.Value;
            drawMonomers(current.getLocation(), current.getState());
            i++;
        }
    }

    public void drawMonomers(Point location, string state)
    {
        ...

        SolidBrush sb = new SolidBrush(mycolor);
        SolidBrush sbt = new SolidBrush(Color.Black);
        Graphics g = drawPanel.CreateGraphics();
        Font text = new Font("Arial", scale / 2);
        Pen pen = new Pen(Color.Black, 1);
        pen.Alignment = PenAlignment.Inset;
        g.FillEllipse(sb, offSet + ((location.Y * scale) / 2) + (location.X * scale), offSet + (-location.Y * scale), scale, scale);
        g.DrawEllipse(pen, offSet + ((location.Y * scale) / 2) + (location.X * scale), offSet + (-location.Y * scale), scale, scale);
        g.DrawString(state, text, sbt, (offSet + ((location.Y * scale) / 2) + (location.X * scale)) + scale / 6, (offSet + (-location.Y * scale)) + scale / 6);

        sb.Dispose();
        sbt.Dispose();
        pen.Dispose();
    }

Więc po każdym „obliczeniu” i dodaniu czegoś do mojej wymyślonej siatki, muszę zaktualizować panel, aby pokazać ten nowy element na mojej siatce. Próbowałem unieważnić panel tuż przeddisplayGrid() funkcja, ale wydaje się powodować jeszcze większe migotanie.

Theheartbeat() funkcja jest obecnie wywoływana w osobnym wątku.

Oto mój nowyPanel klasa.

public class Display : Panel
{
    public Display()
    {
        this.DoubleBuffered = true;

    }
}

questionAnswers(2)

yourAnswerToTheQuestion