C#使用ListView更新数据出现闪烁解决办法

在使用vs自动控件ListView控件时候,更新里面的部分代码时候出现闪烁的情况

如图:

解决以后:

解决办法使用双缓冲:添加新类继承ListView 对其重写

 public class DoubleBufferListView : ListView
{
public DoubleBufferListView()
{
SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
}
}

新建一个DemoTest测试

1.添加一个DoubleBufferListView的实例

       DoubleBufferListView doubleBufferListView1= new DoubleBufferListView();
//
// doubleBufferListView1
//
this.doubleBufferListView1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)()));
this.doubleBufferListView1.FullRowSelect = true;
this.doubleBufferListView1.HideSelection = false;
this.doubleBufferListView1.Location = new System.Drawing.Point(, );
this.doubleBufferListView1.Name = "doubleBufferListView1";
this.doubleBufferListView1.Size = new System.Drawing.Size(, );
this.doubleBufferListView1.TabIndex = ;
this.doubleBufferListView1.UseCompatibleStateImageBehavior = false;
this.doubleBufferListView1.View = System.Windows.Forms.View.Details;

2.将其添加到form窗体里面

 this.Controls.Add(this.doubleBufferListView1);

3.给添加列

        doubleBufferListView1.Clear();
doubleBufferListView1.Columns.Add("Action", , System.Windows.Forms.HorizontalAlignment.Left);
doubleBufferListView1.Columns.Add("value", , System.Windows.Forms.HorizontalAlignment.Right);
doubleBufferListView1.Columns.Add("Action", , System.Windows.Forms.HorizontalAlignment.Left);
doubleBufferListView1.Columns.Add("value", , System.Windows.Forms.HorizontalAlignment.Left);

4.随便添加点内容

         string[] listViewData = new string[];
listViewData[] = "Action";
listViewData[] = "";
listViewData[] = "Action";
listViewData[] = "";
ListViewItem lvItem = new ListViewItem(listViewData, );
doubleBufferView1.Items.Add(lvItem);

5.点击按钮开始运行

 private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(PlayGame);
if (state == false)
{
state = true;
button1.Text = "停止";
th.IsBackground = true;
th.Name = "新线程";
th.Start();
}
else
{
state = false;
button1.Text = "开始"; }
}
private void PlayGame()
{
Random r = new Random();
while (state)
{
string temp = r.Next(, ).ToString();
label1.Text = temp;
this.doubleBufferListView1.Items[].SubItems[].Text = temp;
}
}

6.运行对比图:

左侧是解决闪屏后,右侧是自带的ListView效果

最新文章

  1. 压缩SWF文件大小!减少40%体积!
  2. WEB – Architecture
  3. PHP购物车类
  4. Spring入门_02_属性注入
  5. jQuery:常用方法一览
  6. Objective-c——UI进阶开发第一天(UIPickerView和UIDatePicker)
  7. C++中的复制、赋值、析构
  8. System.Web.UI.ScriptManager.RegisterStartupScript(语句末尾加分号,不然可能会造成语句不执行)
  9. hdu 1509 Windows Message Queue
  10. codeforces 622A Infinite Sequence
  11. 337. House Robber III
  12. vue2.0 axios封装、vuex介绍
  13. JavaEE开发之Spring中的条件注解、组合注解与元注解
  14. chrome google plugins
  15. linux系统调用之系统控制
  16. MVC_Route层层深入
  17. elasticsearch学习之根据发布时间设置衰减函数
  18. 查询当前Oracle数据库的实例
  19. hihocoder第212周-动态规划
  20. OpenERP的短信(SMS)接口

热门文章

  1. .NET开发人员值得关注的七个开源项目 .
  2. Linux 计划任务 访问网页
  3. Java集合之LinkedHashMap
  4. Oracle修改字段类型方法总结
  5. 【CentOS7之防火墙命令】
  6. mongodb指南
  7. Linux搭建Nginx
  8. EBS中加载FORM使用的JavaBean的JAR包
  9. DEV MessageBox
  10. 利用box-shadow实现伪边框透明到图片