如果下载没有进行30秒,则中止DownloadFileAsync

时间:2014-12-23 07:27:08

标签: vb.net

我正在使用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秒,但我不知道如何做到这一点。请帮帮我。

1 个答案:

答案 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