如何防止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!

...全文
181 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 ();

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧