屏幕闪烁问题

3

我遇到了一个问题,即有些电脑(很少)在使用我们的应用程序时会出现闪烁。我在我们应用程序的主窗体中发现了一些奇怪的代码:

    protected override CreateParams CreateParams
    {
        get
        {                
            var cp = base.CreateParams;
            cp.ExStyle |= 0x02000000;//composite window. Composite windows do not render/flickr when controls are born.  This speeds up loading.
            return cp;
        }
    }

代码似乎来自一个在线,他们警告说:
“你应该意识到这只在所有控件绘制(在层次结构内)都是通过 WM_PAINT 完成的环境下才能起作用。使用其他/异步方式渲染层次结构内控件的应用程序可能会出现问题,导致不必要的行为。”
什么是 WM_PAINT?他们是否意味着所有控件都需要通过 win32 API 调用进行绘制,或者这通常是在加载事件中发生的?
有一个注释说添加了代码以减少关于闪烁的错误报告……我只是想知道他们是否在这个问题上一并解决了。

4
请参见此答案 - LarsTech
WM_PAINT是Win32绘制消息...在WinForms中表现为Control.Paint。 - H H
在构造函数中使用以下代码解决了我的闪烁问题:SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true); - aliassce
1个回答

1
尝试使用 DoubleBuffered = true;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接