一个多线程 listview问题

deknight 2009-10-21 12:34:01
我想实现如下功能:
一个listview,然后多线程列出一批数据:


public void listuser()
{
Thread t= new Thread(new ThreadStart(test));
t.Start();
Thread.Sleep(33);
}


public void test()
{
listview1.Columns.Clear();
listview1.Columns.Add("用户");
for (int i = 0; i < 30; ++i)
{
ListViewItem li = new ListViewItem();
li.SubItems[0].Text = "mytestuser"+ i;
listview1.Items.Add(li);
Thread.Sleep(sleepFor);
}
}


但是这样我理解其实只是一个线程for循环
如果我希望开比如多个线程该如何操作?而且不能让listview假死,也就是不能等所有线程处理完了listview才显示所有数据
而应该和我上面一个线程那样,一个一个的把数据列出来,如果我改成:


int i=0;
public void listuser()
{
for (; i < 30; ++i)
{
Thread t= new Thread(new ThreadStart(test));
t.Start();
}
}//这样应该是起了31个线程吧?然后每个线程去执行test()


public void test()
{
listview1.Columns.Add("用户");
ListViewItem li = new ListViewItem();
li.SubItems[0].Text = "mytestuser"+ i;
listview1.Items.Add(li);
Thread.Sleep(sleepFor);
}

但是如果改成这样,listview就会假死,要把所有线程处理完,它才显示最后的结果
请各位帮帮忙,多线程有点迷惑,谢谢.
...全文
292 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cshui918 2009-10-21
  • 打赏
  • 举报
回复
建议了解一下线程处理模型,如何:从线程中操作控件
deknight 2009-10-21
  • 打赏
  • 举报
回复
错了,应该是改成

int i=0;
public void listuser()
{
listview1.Columns.Add("用户");
for (; i < 30; ++i)
{
Thread t= new Thread(new ThreadStart(test));
t.Start();
}
}//这样应该是起了31个线程吧?然后每个线程去执行test()


public void test()
{

ListViewItem li = new ListViewItem();
li.SubItems[0].Text = "mytestuser"+ i;
listview1.Items.Add(li);
Thread.Sleep(sleepFor);
}

deknight 2009-10-21
  • 打赏
  • 举报
回复
没人帮忙吗...
deknight 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icanusethisid 的回复:]
添加一个item后执行Application.DoEvents试试
[/Quote]
没有效果
deknight 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cshui918 的回复:]
建议了解一下线程处理模型,如何:从线程中操作控件
[/Quote]
BeginInvoke也是一样
ICanUseThisID 2009-10-21
  • 打赏
  • 举报
回复
添加一个item后执行Application.DoEvents试试

110,533

社区成员

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

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

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