
关于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() 展开
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() 展开
3个回答
展开全部
应该说,多线程因为多了线程的创建、任务分配和时间片组织,所以执行速度相对比单线程要慢,所以只开2条线程的话没有太大的意义。
不知道你是用什么方法实现IP扫描,但如果是用Socket的话,默认是会阻塞当前线程直到收到Response的,所以UI会暂时失去响应。
对于网络应用,尤其是像IP扫描这样的简单任务,应该相对多开一些线程。但最好不要超过15条线程,因为扫描的过程并不长,线程频繁的启动退出,如果开太多线程,反而会使CPU在线程调度上耗费太多的时间。
不知道你是用什么方法实现IP扫描,但如果是用Socket的话,默认是会阻塞当前线程直到收到Response的,所以UI会暂时失去响应。
对于网络应用,尤其是像IP扫描这样的简单任务,应该相对多开一些线程。但最好不要超过15条线程,因为扫描的过程并不长,线程频繁的启动退出,如果开太多线程,反而会使CPU在线程调度上耗费太多的时间。
展开全部
试试application.doevent()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你线程还不够多
你开N个线程就好了
一个线程速度还是比较慢
Application.Doevent()和那些没什么关系
你开N个线程就好了
一个线程速度还是比较慢
Application.Doevent()和那些没什么关系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询