如何防止ListViewItem闪烁?

znull 2004-05-02 05:50:05
建立一个线程,
t=new System.Threading.Thread(new System.Threading.ThreadStart(Test));
t.Start();

Test如下:
private void Test()
{
int i=0;
ListViewItem item=this.lvwSourceFiles.SelectedItems[0];
while(true)
{
i++;
item.SubItems[1].Text=i.ToString();
}
}
运行后ListViewItem不断的闪烁,看起来很不舒服,怎样解决,请各位大虾详细指点,
Thank you!

...全文
146 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
turnmissile 2004-05-04
to znull(随疯而来):
我的做法只能够解决大量数据变化的时候,让界面等待到所有数据更新完毕才显示变化结果。
如果你还要求所有的changeItem都能够马上反映到界面上来。好像就不能这么做了。或者你可以做一些适当的调整,比如作10changeItem之后再把结果一次性显示出来,这样会减少显示的压力。
  • 打赏
  • 举报
回复
zsuswy 2004-05-03
用 invalidata() 最好
  • 打赏
  • 举报
回复
turnmissile 2004-05-03
晕倒,
listView1.BeginUpdate();
while()
{
changeItem();
}
listView1.EndUpdate();
  • 打赏
  • 举报
回复
znull 2004-05-03
前一楼的大哥
listView1.BeginUpdate();
while()
{
changeItem();
}
listView1.EndUpdate();
没作用的。在changeItem()的同时,listView1.SelectItem[0].SubItems[1].txt不断变化要看的见。
  • 打赏
  • 举报
回复
wolftop 2004-05-02
U~!P~!
  • 打赏
  • 举报
回复
znull 2004-05-02
如何重载?楼上大哥请指点 小弟谢了
  • 打赏
  • 举报
回复
chenyuming2004 2004-05-02
用线程的暂停语句吧。
Thread.Sleep(100);

不过在退出程序之前
即Form1_Closing事件中
一定要先结束线程t.Abort();
不然会出错。
  • 打赏
  • 举报
回复
MagicCondom 2004-05-02
你如果想让listView中的一个item以这么快的速度变化,肯定会闪,除非你重载TreeView的OnPaint采用白色的选中背景,并且重画时不刷新背景。
建议用个简单办法:
在item.SubItems[1].Text=i.ToString();后面加一个Thread.Sleep(100);
  • 打赏
  • 举报
回复
znull 2004-05-02
Thank you!不过试了上边的方法,没任何效果呀。
while(true)条件不会执行该循环后的EndUpdate的
如果把放入while(true){...}中,闪烁的更厉害了。

忘了说明:listView1.View=View.Details;

  • 打赏
  • 举报
回复
chenyuming2004 2004-05-02
listView1.BeginUpdate();

listView1.EndUpdate();
BeginUpdate
在要添加项目前使用,
EndUpdate
在添加结束后使用。
这两个方法对TreeView控件同样适用。
  • 打赏
  • 举报
回复
czy412 2004-05-02
ListView1.BeginUpdate ();

.....
ListView1.EndUpdate ();
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-05-02 05:50
社区公告

让您成为最强悍的C#开发者