首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

URLDownloadToFile的有关问题.多线程或异步怎么实现

2012-01-21 
URLDownloadToFile的问题.多线程或异步如何实现?PrivateDeclareFunctionURLDownloadToFileLiburlmon Ali

URLDownloadToFile的问题.多线程或异步如何实现?
Private   Declare   Function   URLDownloadToFile   Lib   "urlmon "   Alias   "URLDownloadToFileA "   (   _
ByVal   pCaller   As   Long,   _
ByVal   szURL   As   String,   _
ByVal   szFileName   As   String,   _
ByVal   dwReserved   As   Long,   _
ByVal   lpfnCB   As   Long   _
)   As   Long

'下载一个文件到本地
Function   DownloadFile(ByVal   strURL   As   String,   ByVal   strFile   As   String)   As   Boolean
Dim   lngReturn   As   Long
Dim   ifn   As   String
DoEvents
lngReturn   =   URLDownloadToFile(0,   strURL,   strFile,   0,   0)
If   lngReturn   =   0   Then   DownloadFile   =   True
DoEvents
End   Function

用以下代码可以实现一个文件的下载.
本人很贪心,同时执行了三次事件DownloadFile
if   ok=ok   then
i=0
DownloadFile( "http:// "&i, "C:\ "&i&   ".jpg "):doevents:DownloadFile( "http:// "&i+1, "C:\ "&i+1&   ".jpg "):DownloadFile( "http:// "&i+2, "C:\ "&i+2&   ".jpg ")

用:实现了3个文件同时下载.
问题出来了.当连续重复10次这3次代码的时候,程序卡的慢了.查了一下CPU,只用到15%不到,但是界面程序反应不过来.
找了资料说是说使用URLDownloadToFile或URLDownloadToCacheFile被阻塞了,界面程序反应不过来的原因.

--引用
唯一的致命问题是URLDownloadToCacheFile会等待下载过程结束后返回,这样由于界面线程被阻塞,IE窗口在下载过程中总是处于“没有响应”状态。    
--结束引用

我于是不贪心了,把它改成一次只执行一次.
DownloadFile( "http:// "&i, "C:\ "&i&   ".jpg ")
当重复10次I时,问题依然存在.界面程序仍然会卡.只比3个同时执行好一丁点.


如何实现多线程或异步使用URLDownloadToFile?
应该这样实现,就不会阻塞了.

[解决办法]
xacker.net/URLDownload.rar
试试这个
[解决办法]
刚才忘了发地址了...

http://www.vbgood.com/viewthread.php?tid=51348&highlight=

热点排行