2012-03-31 3 views
1

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

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

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(); 
    } 

ответ

2

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

+0

Thats a для awesome. Привет, спасибо. Правильно. – nixgadgets

+0

Нужно ли все-таки вызвать Dispose в конце? Из моего понимания Dispose очищает ресурсы. – nixgadgets