Я бы просто перетянул все ваши вещи в ваш собственный буфер, а затем скопировал все сразу.Я использовал это для графики во многих приложениях, и он всегда работал очень хорошо для меня:
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
Invalidate();// every 100 ms
}
private void Form1_Load(object sender, EventArgs e)
{
DoubleBuffered = true;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Bitmap buffer = new Bitmap(Width, Height);
Graphics g = Graphics.FromImage(buffer);
Pen pen = new Pen(Color.Blue, 1.0f);
//Random rnd = new Random();
for (int i = 0; i < Height; i++)
g.DrawLine(pen, 0, i, Width, i);
BackgroundImage = buffer;
}
РЕДАКТИРОВАТЬ: После дальнейшего исследования, похоже, что ваша проблема в том, что выВы устанавливаете для объекта Graphics значение:
Graphics g = CreateGraphics();
должно быть:
Graphics g = e.Graphics();
Таким образом, ваша проблема может быть решена путем создания ручного буфера, как я делал выше, или простого измененияВаш графический объект.Я проверил оба, и они оба работают.