本帖最后由 Monn 于 2014-3-25 14:31 编辑
问题已解决,多谢@superai 和 @yyhapy 的帮助,下面贴上解决后的代码,给遇到此问题的兄弟一提示。
[C#] 纯文本查看 复制代码 System.Threading.Thread t;//定义线程
private delegate void VoidDelegate();//定义委托
private void Form1_Load(object sender, EventArgs e)
{
t = new System.Threading.Thread(new System.Threading.ThreadStart(this.DoCheckIp));
}
private void button1_Click(object sender, EventArgs e)
{
t.Start();//线程开始
}
ProxyHelper py = new ProxyHelper();//初始化ProxyHelper类
private void DoCheckIp()
{
for (int i = 0; i < listIps.Items.Count; i++)
{
//listIps.Items[i].SubItems[2].Text = "测试中...";
//listIps.Items[i].SubItems[2].Text = py.CheckProxy(listIps.Items[i].SubItems[1].Text).ToString();
//listIps.Items[i].SubItems[3].Text = py.GetPingTime(listIps.Items[i].SubItems[1].Text);
//listIps.Items[i].SubItems[4].Text = py.GetIPAddress(listIps.Items[i].SubItems[1].Text);
string ip = "";
string jg = "检测中...";
string pingtime = "";
string ipaddress = "";
this.Invoke(new VoidDelegate(delegate()
{
ip = listIps.Items[i].SubItems[1].Text;
}));
//显示检测中
this.Invoke(new VoidDelegate(delegate()
{
listIps.Items[i].SubItems[2].Text = jg;
}));
//判断代理是否可用,不可用就直接显示失败,不在检测ping值和归属地
if (py.CheckProxy(ip))
{
jg = "成功";
pingtime = py.GetPingTime(ip).ToString();
ipaddress = py.GetIPAddress(ip).ToString();
}
else
{
jg = "失败";
pingtime = "";
ipaddress = "";
}
this.Invoke(new VoidDelegate(delegate()
{
listIps.Items[i].SubItems[2].Text = jg;
listIps.Items[i].SubItems[3].Text = pingtime;
listIps.Items[i].SubItems[4].Text = ipaddress;
}));
}
}
我需要读取listview第二列的值,然后根据第二列的值分析后,写入第三列,更新的时候加入了多线程,也使用了委托,但是还是会整个循环处理完才会更新listview界面。。界面还非常卡,不知道俺的代码哪里出问题了,请大侠们帮助。。代码如下。。
[C#] 纯文本查看 复制代码 System.Threading.Thread t;//定义线程
private delegate void VoidDelegate();//定义委托
private void Form1_Load(object sender, EventArgs e)
{
t = new System.Threading.Thread(new System.Threading.ThreadStart(this.DoCheckIp));
}
private void button1_Click(object sender, EventArgs e)
{
t.Start();//线程开始
}
ProxyHelper py = new ProxyHelper();//初始化ProxyHelper类
private void DoCheckIp()
{
this.Invoke(new VoidDelegate(delegate()
{
for (int i = 0; i < listIps.Items.Count; i++)
{
listIps.Items[i].SubItems[2].Text = "测试中...";
listIps.Items[i].SubItems[2].Text = py.CheckProxy(listIps.Items[i].SubItems[1].Text).ToString();
listIps.Items[i].SubItems[3].Text = py.GetPingTime(listIps.Items[i].SubItems[1].Text);
listIps.Items[i].SubItems[4].Text = py.GetIPAddress(listIps.Items[i].SubItems[1].Text);
System.Threading.Thread.Sleep(1000);
}
}));
}
直接把我的工程发上来。。其实就是个代理测试小程序。。请有空的大神帮忙看看咋处理。。
代理测试.zip
(91.87 KB, 下载次数: 88)
|