关于Winform线程的疑问

这几天正在做一个关于局域网IP扫描的winform程序,因为在首次打开扫描IP的时候软件就像没有响应一样,点什么也不行,因此我想做个多线程,主窗体打开以后,利用子线程扫描... 这几天正在做一个关于局域网IP扫描的winform程序,因为在首次打开扫描IP的时候软件就像没有响应一样,点什么也不行,因此我想做个多线程,主窗体打开以后,利用子线程扫描局域网IP,可是做成了以后感觉速度也没有增加多少,在扫描IP的时候,主窗体还是卡在那,是我写的程序有问题?还是线程根本没调用正确?谢谢!下边是代码:

1)点击扫描局域网IP按钮以后执行:
Thread t1 = new Thread(kaka);
t1.Start();
w.Show();

2)private void kaka()
{
if (this.InvokeRequired)
{
//IpList.Invoke(new NewThreadIp(this.ThreadIP));
IpList.BeginInvoke(new NewThreadIp(this.ThreadIP));
}
else
{
this.ThreadIP();
}
}
3)ThreadIP()就是执行扫描IP的函数

请问这样执行算是多线程么??我是边学边写的~~谢谢!如果是的话,那执行正确么??为什么程序速度没有明显的加快?
NewThreadIp是一个委托~~

4):private delegate void NewThreadIp()
展开
 我来答
西森6
2009-03-24 · TA获得超过1552个赞
知道小有建树答主
回答量:436
采纳率:100%
帮助的人:733万
展开全部
应该说,多线程因为多了线程的创建、任务分配和时间片组织,所以执行速度相对比单线程要慢,所以只开2条线程的话没有太大的意义。

不知道你是用什么方法实现IP扫描,但如果是用Socket的话,默认是会阻塞当前线程直到收到Response的,所以UI会暂时失去响应。

对于网络应用,尤其是像IP扫描这样的简单任务,应该相对多开一些线程。但最好不要超过15条线程,因为扫描的过程并不长,线程频繁的启动退出,如果开太多线程,反而会使CPU在线程调度上耗费太多的时间。
bojunyi
2009-03-23 · TA获得超过936个赞
知道小有建树答主
回答量:469
采纳率:100%
帮助的人:400万
展开全部
试试application.doevent()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
定复2d
2009-03-23 · TA获得超过3196个赞
知道大有可为答主
回答量:2052
采纳率:0%
帮助的人:1967万
展开全部
你线程还不够多
你开N个线程就好了
一个线程速度还是比较慢
Application.Doevent()和那些没什么关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式