解决C#中ListView数据刷新时界面闪烁的问题

来源:互联网 发布:淘宝的隐形眼镜靠谱吗 编辑:程序博客网 时间:2024/05/17 22:20

通常往ListView不断写入数据时,会发现ListView上的数据存在抖动闪烁的问题。对于追求完美的强迫症晚期患者而言,这一点是无法容忍的。同时也带来不良的用户体验。

下面通过双缓冲的方法解决该问题。

1. 新建一个类

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

2. 实例化这个类,并在Form中具体设置

DoubleBufferListView listView1 = new DoubleBufferListView();  private void Spurious_Test_Pannel_Load(object sender, EventArgs e)  {      foreach (TabPage p in this.tabControl1.TabPages)      {          p.Parent = null;      }      this.tabPage1.Controls.Add(listView1);       listView1.GridLines = true;     // 打开Grid      listView1.View = View.Details;  // detail视图      listView1.FullRowSelect = true;    // 行全选      listView1.Dock = DockStyle.Fill;   // 填充父容器      listView1.BackColor = Color.Azure;  // background color  } 

3.往该ListView控件内写入数据,看最后的实现结果

public void myFun()  {      listView1.Columns.Add("Num");      listView1.Columns.Add("Result");      for (int i = 0; i < 20; i++)      {          ListViewItem p = listView1.Items.Add(i.ToString());          p.SubItems.Add("This is test" + i.ToString());      }      Thread.Sleep(300);  } 
4.新建一个Button控件调用上面的自定义方法

private void button1_Click(object sender, EventArgs e)  {      Thread thread1 = new Thread(new ThreadStart(delegate      {          myFun();      }));      thread1.IsBackground = true;      thread1.Start();  } 



1 0