为Winform配置双缓冲避免闪屏

最近新做了一个项目,项目的界面好多的控件,然后在进入界面的时候会刷新好多次,而且每次操作都有不必要的刷新,研究发现了需要配置双缓冲才能避免闪屏,代码如下。

 1   //获取当前系统的环境版本,不同的环境对应不同的属性。
 2    Version v = System.Environment.Version;
 3
 4    if (v.Major < 2)
 5    {
 6           this.SetStyle(ControlStyles.DoubleBuffer, true);
 7     }
 8    else
 9    {
10            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
11     }
12
13      this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
14      this.SetStyle(ControlStyles.UserPaint, true);
15      this.SetStyle(ControlStyles.ResizeRedraw, true);

时间: 2024-08-02 02:38:23

为Winform配置双缓冲避免闪屏的相关文章

winform的双缓冲

搜搜winform的双缓冲,就会发现网络上有很多文章,乱七八糟说的不明不白.第一种方案: SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲 第二种方案: this.DouleBuffered=true 第三种方案: Bitmap bimtB

双缓冲解决控制台应用程序输出“闪屏”(C/C++,Windows)

使用 C 语言编写游戏的小伙伴们想必起初都要遇到这样的问题,在不断清屏输出数据的过程中,控制台中的输出内容会不断地闪屏.出现这个问题的原因是程序对数据处理花掉的时间影响到了数据显示,或许你可以使用局部覆盖更新方法(减少更新数据量)来缓解闪屏,但是这种方法并不适用于所有场合,尤其是更新数据本身就非常大的场合. 本文将讲述解决控制台应用程序输出闪屏的终级解决方法——双缓冲. 问题呈现 下面的代码演示了在高速不断清屏输出数据的过程的闪屏问题,特邀您一试: 1 2 3 4 5 6 7 8 9 10 11

WinForm Flicker闪屏解决方案

开发WinForm 程序时经常会遇到闪屏的问题,这会给用户造成很差的使用体验,所以必须妥善解决好这个问题. 首先,我们先要找出闪屏的原因,就我目前遇到的问题而言,其原因真是五花八门. 主要的原因有:使用了很多的组件导致加载缓慢,使用了性能差的组件(PictureBox.Button等). 所以,不论开发者的水平如何,微软给我们也挖了坑的. 对于控件太多造成的闪屏,其原因有两个: 1. 绘制控件时,Windows 会给控件发送两个消息.第一个是WM_ERASEBKGND消息,它会触发OnPaint

QT显示如何减轻闪屏(双缓冲和NoErase)

很多同志在些QT 程序后会遇见闪屏的问题, 有时速度非常快,但毕竟影响了显示效果,如何做到减轻屏幕抖动或闪屏呢?我曾试过如下的办法:1.使用双缓冲. 比如我们在一个Widget里面绘多个图的话, 先创建一个QPixmap对象 然后用QPainter在这个QPixmap对象上绘图,最用后BitBlt 将数据copy到active painterDev上就可以了.2.QWdiget 对象在重绘的时候选择NoErase. 调用repaint(false)即可,  这样可以防止在绘图的时候 系统会先将整

winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法。

protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } 接着找办法解决500多个控件PAINT缓慢的效能问题,心塞.分类都不想分了,就这样. winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法.,布布扣,bubuko.com

.net WINFORM的GDI双缓冲的实现

有时候在窗体中执行不断的GDI+操作的时候会出现闪速的状况,除了修改窗体的参数,更应该解决刷新本身的问题,双缓冲可能就是这样来的. 方法1: 用GDI绘制在位图上,然后再重新生成位图 Bitmap bt = new Bitmap(510, 510); Graphics g = Graphics.FromImage(bt); g.DrawEllipse(Pens.Red, 100, 100, new Random().Next(1, 60), 50); g.Dispose(); gb.DrawIm

winform MDI子窗口闪动问题(本人测试100%有效解决闪屏问题)

将下面的代码随便放到主窗体的任何一个地方 protected override CreateParams CreateParams //解决MDI闪屏 { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }

C# 解决winform界面闪屏问题

1 添加以下代码: // 防止闪屏 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }

一行代码开启 Winform 中的 ListView 和 DataGridView 双缓冲功能

ListView 中的 DoubleBuffered 属性是 protected 的,外部不能直接修改,但实际使用中,我们一般都需要开启双缓冲来避免控件闪烁. 网上很多人都是通过自定义 ListView 来实现的,虽然也不复杂,但其实用反射是更简单的办法: lv.GetType().GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(dgv, true, null)