如何在Windows窗体上停止闪烁?

时间:2014-06-09 07:14:36

标签: c# devexpress flicker

如何在Windows窗体上停止闪烁?

我使用了以下有助于停止闪烁的代码

protected override CreateParams CreateParams
{
    get
    {
         CreateParams cp = base.CreateParams;
         cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
         Thread.Sleep(100);
         return cp;
    }
}

但使用此我的CPU使用率达到100%。

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:2)

通常情况下,只需将表单DobuleBuffered属性设置为True即可纠正闪烁和相关的绘图问题。不需要任何专门的代码。

你试过试试吗?

enter image description here

答案 1 :(得分:1)

如果您发布导致表单闪烁的代码,将会很有帮助 没有它,这是我能想到的最通用的解决方案(除了关闭显示器:0)):

尝试使用this SO thread中建议的答案。

基本上你需要:

创建以下类:

class DrawingControl
{
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);

    private const int WM_SETREDRAW = 11; 

    public static void SuspendDrawing( Control parent )
    {
        SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
    }

    public static void ResumeDrawing( Control parent )
    {
        SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
        parent.Refresh();
    }
 }

在您的表单中,在闪烁到SuspendDrawing之前添加一个电话,然后在ResumeDrawing之后添加一个电话。 类似的东西:

public void MyFlickeringFunction()
 {
     try
     {
         SuspendDrawing(this);
         /*Your code goes here...*/
     }
     finally
     {
          ResumeDrawing(this)
     }
 }