Мерцание в пользовательском интерфейсе winform

Я реализовал пользовательский интерфейс winform для Microsoft Robotics Studio для отображения некоторых данных датчиков. В настоящее время он рисует панель каждые 100 миллисекунд, используя функцию ниже. Проблема в том, что я вижу мерцание на панели, которую я рисую, и при перетаскивании окна кажется очень медленным. Основываясь на том, что другие люди встречали на этом форуме, я использовал DoubleBuffered = true при создании формы, но безрезультатно. Какие-нибудь советы о том, как я могу это улучшить? Заранее спасибо.

Эта функция рисует линии на панели, представляющей радар,

    private void DrawRadarLines()
    {
        myPen = new Pen(Color.Red, 2);
        formGraphics = radarMap.CreateGraphics();

        for (int i = 0; i < sensorNetworkNum * 5; i++)
        {
            formGraphics.DrawLine(myPen, 
                (float)(195 - radarMapLines[i, 0] * scalingFactor), 
                (float)(195 - radarMapLines[i, 1] * scalingFactor), 
                (float)(195 - radarMapLines[i, 2] * scalingFactor), 
                (float)(195 - radarMapLines[i, 3] * scalingFactor));
        }

        myPen.Dispose();
        formGraphics.Dispose();
    }

person nixgadget    schedule 31.03.2012    source источник


Ответы (1)


Это неизбежно, когда вы используете CreateGraphics (), вы рисуете прямо на экране. Просто не делайте этого, вместо этого вызовите radarMap.Invalidate () и переместите код в обработчик событий Paint для radarMap. Теперь двойная буферизация элемент управления будет работать.

person Hans Passant    schedule 31.03.2012
comment
Обязательно ли в конце вызывать Dispose? Насколько я понимаю, Dispose очищает ресурсы. - person nixgadget; 31.03.2012