2012-03-31 6 views
1

Ich habe eine Winform-Benutzeroberfläche für Microsoft Robotics Studio implementiert, um einige Sensordaten anzuzeigen. Momentan wird mit der folgenden Funktion alle 100 Millisekunden ein Panel erstellt. Das Problem ist, dass ich auf dem Panel flackere, das ich zeichne, und wenn ich das Fenster ziehe, fühlt es sich sehr träge an. Basiert, was andere Leute in diesem Forum angetroffen haben, benutzte ich DoubleBuffered = true, wenn ich das Formular vergebens schuf. Irgendwelche Tipps, wie ich das verbessern kann? Danke im Voraus.Flackern auf winform UI

Diese Funktion zeichnet Linien auf dem Panel ein Radar darstellt,

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

Antwort

2

Das ziemlich unvermeidlich ist, wenn Sie Create() verwenden, Sie zeichnen direkt auf dem Bildschirm. Rufen Sie stattdessen radarMap.Invalidate() auf und verschieben Sie den Code in einen Paint-Ereignishandler für radarMap. Jetzt Doppel-Pufferung the control wird funktionieren.

+0

Das ist ein für genial. Hey danke Mann. Auf den Punkt gebracht. – nixgadgets

+0

Muss am Ende noch Dispose aufgerufen werden? Aus meiner Sicht löscht Dispose die Ressourcen. – nixgadgets