注册 登录
编程论坛 C# 论坛

求助listview的多线程方式

eddybccn 发布于 2020-03-17 23:39, 4612 次点击
///新手求助多线程怎么写

///listview数据
序号,IP地址,用户,密码 .....
1,192.168.1.11,admin,admin123,....
2,192.168.1.12,admin,admin123,....
3,192.168.1.13,admin,admin123,....
4,192.168.1.14,admin,admin123,....


Get_IP_State("192.168.1.11",21, "admin", "admin12345");
功能就是登录IP设备,取状态后显示到listview1中,listview2反馈错误数据
下面的是执行代码,想要求助逐行显示,多线程方式, 没有多线程300个IP地址,UI卡死3分多钟。
而且都是执行完了才显示、
          foreach (ListViewItem item in this.listView1.Items)
            {
                Get_IP_State(item.SubItems[1].Text,  item.SubItems[2].Text, item.SubItems[3].Text);
            }
            this.listView2.EnsureVisible(this.listView2.Items.Count - 1);
4 回复
#2
zj8912182020-03-18 21:52
首先开启listview的双缓冲,开启一个子线程thread,task都可以,在子线程里面用委托跨线程更新
#3
zj8912182020-03-18 21:58
thread updateList = new thread(new threadstart(你的函数));
updateList.Isbackground = true;
...
updateList.start();

函数里面
listview.invoke(new methodinvoker(delegate()
{
    foreach (ListViewItem item in this.listView1.Items)
            {
                Get_IP_State(item.SubItems[1].Text,  item.SubItems[2].Text, item.SubItems[3].Text);
            }
            this.listView2.EnsureVisible(this.listView2.Items.Count - 1);
}))
#4
zj8912182020-03-18 22:01
双缓冲listview..GetType().GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(ListView,true,null);
#5
eddybccn2020-03-19 07:57
谢谢,
1