Я написал следующую простую программу, которая рисует линии на экране каждые 100 миллисекунд (срабатывает по таймеру 1). Я заметил, что рисунок немного мерцает (то есть, окно не всегда полностью голубое, но серый светит). Поэтому моя идея заключалась в использовании двойной буферизации. Но когда я это сделал, это еще больше ухудшило ситуацию. Теперь экран почти всегда был серым, и только изредка шел синий цвет (демонстрируемый таймером2, переключая свойство DoubleBuffered
каждые 2000 миллисекунд).Двойная буферизация с C# имеет отрицательный эффект
Что может быть для этого объяснением?
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g = CreateGraphics();
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);
}
// every 100 ms
private void timer1_Tick(object sender, EventArgs e) {
Invalidate();
}
// every 2000 ms
private void timer2_Tick(object sender, EventArgs e) {
DoubleBuffered = !DoubleBuffered;
this.Text = DoubleBuffered ? "yes" : "no";
}
}
}
Да, вы правы. Это было частью 2 моего ответа. –
Это просто и работает. Благодарю. –