如何在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%。
请帮帮我。提前谢谢。
答案 0 :(得分:2)
通常情况下,只需将表单DobuleBuffered
属性设置为True
即可纠正闪烁和相关的绘图问题。不需要任何专门的代码。
你试过试试吗?
答案 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)
}
}