我正在使用webclient.downloadfileasync下载许多文件。 我已将maximumconnection设置为10,因此只能同时下载10个文件。 有时文件在其他地方缺失。当发生这种情况时,DownloadFileAsync只是等待下载丢失的文件(我不知道多长时间)。 我想设置一个时间限制,所以如果没有进行文件下载 超过30秒,它应该被取消,以便它可以继续下载其他文件。
我该怎么办?
Dim wc As WebClient = New WebClient
wc.DownloadFileAsync(Ur1, localFL)
AddHandler wc.DownloadProgressChanged, Sub(sender As Object, e As DownloadProgressChangedEventArgs)
此后我不知道。我想我应该为每个downloadfileasync和wc.abort()设置一个30秒的计时器,如果DLprogresschanged是假的30秒,但我不知道如何做到这一点。请帮帮我。
答案 0 :(得分:1)
GlennG在这里回答:How to change the timeout on a .NET WebClient object
使用此类,您可以设置连接的超时。您需要为DownloadFileCompleted事件添加AsyncCompletedEventHandler并使用其中的结果。
Public Class WebClient
Inherits System.Net.WebClient
Private _TimeoutMS As Integer = 10000
Public Sub New()
MyBase.New()
'MyBase.Encoding = System.Text.Encoding.UTF8
End Sub
Public Sub New(ByVal TimeoutMS As Integer)
MyBase.New()
_TimeoutMS = TimeoutMS
'MyBase.Encoding = System.Text.Encoding.UTF8
End Sub
''' <summary>
''' Set the web call timeout in Milliseconds
''' </summary>
''' <value></value>
Public WriteOnly Property setTimeout() As Integer
Set(ByVal value As Integer)
_TimeoutMS = value
End Set
End Property
Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
Dim w As System.Net.HttpWebRequest = CType(MyBase.GetWebRequest(address), HttpWebRequest)
If _TimeoutMS <> 0 Then
w.Timeout = _TimeoutMS
End If
Return w
End Function
End Class