代码改变世界

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

2022-07-08 09:28  狼人:-)  阅读(1405)  评论(0编辑  收藏  举报

通常往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();
}

————————————————
版权声明:本文为CSDN博主「吾性圣人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/IllegalName/article/details/64438108