C# 图形闪烁
我已经在屏幕上画了一些东西(作为其他一切的覆盖),但是当我在绘图上移动一些东西时,它开始闪烁,我已经将DoubleBuffered设置为true 他们的方法是用dll、函数、渲染来解决这个问题吗C# 图形闪烁,c#,drawing,C#,Drawing,我已经在屏幕上画了一些东西(作为其他一切的覆盖),但是当我在绘图上移动一些东西时,它开始闪烁,我已经将DoubleBuffered设置为true 他们的方法是用dll、函数、渲染来解决这个问题吗 private void button2_Click(object sender, EventArgs e) { DoubleBuffered = true; SetStyle(ControlStyles.OptimizedDoubleBuffer, true); backgro
private void button2_Click(object sender, EventArgs e)
{
DoubleBuffered = true;
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Point midx = new Point(960, 960);
Point midy = new Point(540, 540);
Point LinksBoven = new Point(10, 10);
Point pt = Cursor.Position;
string letter = "drawing on";
float emSize = 12;
while (true)
{
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
{
System.Drawing.Pen myPen;
myPen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(0, 200, 0));
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
if (cbCircel.Checked == true)
{
g.DrawEllipse(Pens.Black, midx.X - 10, midy.Y - 10, 20, 20);
}
if (cbKruis.Checked == true)
{
g.DrawLine(myPen, 940, 540, 980, 540);
g.DrawLine(myPen, 960, 560, 960, 520);
}
pt.X = 10;
pt.Y = 10;
g.DrawString(letter, new Font(FontFamily.GenericSansSerif, emSize, FontStyle.Regular), new SolidBrush(Color.Green), pt);
}
}
}
您可能已经将表单设置为双缓冲区,但如果调用绘制线条(etc),则可能需要先将所有线条绘制到一个单独的图像,然后将它们交换出去。这将减少问题,至少是一个愚蠢的假设。。。是否在移动光标时异步任务尚未完成?我不确定您是否意识到这一点,但您的代码是在桌面窗口上绘制的,而不是在窗体上绘制的。