C# 图形闪烁

C# 图形闪烁,c#,drawing,C#,Drawing,我已经在屏幕上画了一些东西(作为其他一切的覆盖),但是当我在绘图上移动一些东西时,它开始闪烁,我已经将DoubleBuffered设置为true 他们的方法是用dll、函数、渲染来解决这个问题吗 private void button2_Click(object sender, EventArgs e) { DoubleBuffered = true; SetStyle(ControlStyles.OptimizedDoubleBuffer, true); backgro

我已经在屏幕上画了一些东西(作为其他一切的覆盖),但是当我在绘图上移动一些东西时,它开始闪烁,我已经将DoubleBuffered设置为true 他们的方法是用dll、函数、渲染来解决这个问题吗

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),则可能需要先将所有线条绘制到一个单独的图像,然后将它们交换出去。这将减少问题,至少是一个愚蠢的假设。。。是否在移动光标时异步任务尚未完成?我不确定您是否意识到这一点,但您的代码是在桌面窗口上绘制的,而不是在窗体上绘制的。