读书人

URLDownloadToFile的有关问题.多线程或

发布时间: 2012-01-21 21:31:43 作者: rapoo

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=

读书人网 >VB

热点推荐