返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

如何解决C# listview多线程调用闪烁问题与注意事项

时间:2017-11-06 22:46来源:知行网www.zhixing123.cn 编辑:麦田守望者

listview单线程(通常是创建listview控件的线程)调用绑定数据时不会发生闪烁问题,而listview多线程调用又是另外一遍天地,从开始向 listview 添加数据到绑定结束,listview 一直闪烁不断,翻两页眼睛都受不了了。

  这个问题应该怎么解决?C#已经提供了一种简单的解决方案,只要开始向 listview 添加数据前加一句 listview.BeginUpdate(),结束添加数据后再加一句 listview.EndUpdate(),C# listview闪烁就完美解决了。其实 listview闪烁是每添加一次数据因 istview 的布局有变化都刷新屏幕所致,BeginUpdate() 和 EndUpdate() 就是告诉 listview 添加数据开始后不要刷新屏幕,直到添加数据结束刷新一次即可。

 

  一、解决 C# listview闪烁问题实例

  以下是一个listview多线程调用防闪动完整实例,代码如下:

  using System.Threading;

  /// <summary>
  /// 线程开始执行
  /// </summary>
  private void StartThread()
  {
    Thread thread = new Thread(new ThreadStart(ThreadListView));
    thread.Start();
  }

  /// <summary>
  /// 解决listview多线程调用闪烁问题实例
  /// </summary>
  private void ThreadListView()
  {
    listView1.BeginUpdate();//防listview闪烁开始
    AddListView();
    listView1.EndUpdate();//防listview闪烁结束
  }

  /// <summary>
  /// 向 listview 添加数据,多线程调用控件
  /// </summary>
  private void AddListView()
  {
    listView1.Clear();
    listView1.GridLines = true;
    listView1.View = View.Details;
    listView1.Scrollable = true;
    listView1.MultiSelect = false;

    listView1.Columns.Add("产品名称", 180, HorizontalAlignment.Center);
    listView1.Columns.Add("产品价格", 100, HorizontalAlignment.Center);

    ListViewItem lvi = new ListViewItem();
    lvi.SubItems.Clear();
    lvi.SubItems[0].Text = "笔记本电脑";
    lvi.SubItems.Add("5000");
    listView1.Items.Add(lvi);

    lvi = new ListViewItem();
    lvi.SubItems[0].Text = "名牌手机";
    lvi.SubItems.Add("2800");
    listView1.Items.Add(lvi);
  }

  调用方法:StartThread();

 

 

  二、C# listview多线程调用防闪烁【注意事项】

  如果在开始向 listview 添加数据前加了 listView1.BeginUpdate();,程序途中返回,一定要加 listView1.EndUpdate();,否则listView 一直处于绑定数据未结束状态而影响程序正常运行。如:


  listView1.BeginUpdate();
  if(条件为真)return;//错误

  if(条件为真)//正确
  {
    listView1.EndUpdate();
    return;
  }

  ListViewItem lvi = new ListViewItem();
  lvi.SubItems.Clear();
  lvi.SubItems[0].Text = "笔记本电脑";
  lvi.SubItems.Add("5000");
  listView1.Items.Add(lvi);

  listView1.EndUpdate();

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):C#
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
猜你感兴趣