当前位置:编程学习 > C#/ASP.NET >>

<<SOS>>多线程求援!!!

有个问题,要请教。情况是这样的:

1)有一个表,其中存放了若干条网页网址信息。
2)现在要从这个表中读出相关网页网址等信息后,交给下载模块去进行下载网页文件操作。
3)下载的网页文件信息添加到一个listview中,并将网页内容保存到另外的一个表中。

目前用单线程做没有问题,但是单线程速度过于慢了。现在想使用多线程来完成(或称为改造原程序)同样的功能,以提升从读取下载网页网址信息->下载网页->成功后添加到listview中->保存网页内容这一整个操作的速度。


但由于没有用过多线程,找了些资料看了看,都不够全面,都是些简单的介绍,所以不知道如何下手。不知道您是否可以提供些帮助,或是给份相关的范例程序呢。还有刷新listview等相关提供程序进度信息的控件时,我最近做的一个是使用backgroundwork实现(但不是此项目),不知道在使用多线程后如何刷新诸如listview等控件。
--------------------编程问答-------------------- 多线程成的思想就是有任务需要并行,如果你想不出哪些任务需要并行,那你就不必使用多线程

不知道你所谓的下载网页单线程过慢是什么意思,Http请求一般都是单线程的,当然你可以开多个线程,每个线程请求一个页面。这种情况下需要多线程是因为下载数据的任务需要时间,但不能因为下载数据就不处理界面的消息动作,也就是说至少下载数据与界面处理两种任务需要并行。

线程同步中都是这样的:B线程要收到A线程的通知,那么必然有B会通过某个方法等待(阻塞),直到A线程给B线程这个通知B才能继续往下执行,但是通常不是只等某一个通知,而是等好几个通知,任意一个通知到达B就进行处理,处理完之后继续等待通知。如果B是主线程,那么等待通知一般是等待消息,调用的方法是GetMessage,它在没消息的时候就阻塞了,有消息B就拿出来处理(有可能是系统给的消息,也有可能是其他线程给的),处理完之后继续等待下一个消息,这就是所谓的消息循环。

C#中有SynchronizationContext的Post和Send以及Control的BeginInvoke和Invoke来进行同步,这两个同步都是用消息的方式,Post和BeginInvoke是异步的,意味着不管目标线程是否执行完该方法,Post和BeginInvoke都会马上返回,因此他们一般用于无需返回执行结果的通知,Send和Invoke是同步的,意味着只有目标线程执行完才返回,所以可以拿到执行结果。SynchronizationContext用于各种线程都比较方便,而Control的一般只用于主线程。 --------------------编程问答-------------------- 单CPU使用多线程的意义也不大。 --------------------编程问答-------------------- 既然你用过backgroundwork,那么刷新当然写在完成时的回调方法里.

补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,