【发布时间】:2015-10-26 15:56:32
【问题描述】:
我知道以前有人问过这个问题,但是我有一种特殊的方式我想通过网络客户端下载文件,我想通过Do While 语句一次下载每个文件,但它只是添加了文件下载并继续执行下一个任务,该任务还会下载另一个文件,因此它会相互抵消并使应用程序崩溃。
Private Function StartDownloads()
Dim wc As New WebClient
AddHandler wc.DownloadProgressChanged, AddressOf DownloadProgressChanged
AddHandler wc.DownloadFileCompleted, AddressOf DownloadFileCompleted
Dim delimiterChars As Char() = {"+"c}
Dim words As String() = RichTextBox1.Text.Split(delimiterChars)
Dim i As Integer = 1
Do While (i < words.Length)
Dim delimiterChars1 As Char() = {"|"c}
Dim words1 As String() = words(i).Split(delimiterChars1)
Dim name As String = words1(0)
Dim fileurl As String = words1(2)
ToolStripStatusLabel1.Text = "Downloading " & name & ":"
wc.DownloadFileAsync(New System.Uri(fileurl), Path.GetTempPath() & "\" & name)
i = (i + 1)
Loop
End Function
与
Private Sub DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs)
ProgressBar1.Value = e.ProgressPercentage
ToolStripStatusLabel2.Text = String.Format("{0} MB's / {1} MB's",
(e.BytesReceived / 1024D / 1024D).ToString("0.00"),
(e.TotalBytesToReceive / 1024D / 1024D).ToString("0.00"))
End Sub
所以基本上在Do While 语句中它开始下载然后继续而不等待下载完成然后同时下载两者,然后使程序崩溃/干扰显示下载名称的标签,原因是与其他人不同的问题是我需要它来指定下载名称,因为我无法通过将下载添加到列表中来处理其他教程...
所以如果有人可以帮助我让Do While 语句等待下载完成然后继续下一个而不丢失文件名和类似的东西,请给我一些提示,谢谢!
我知道DownloadFile 等待下载完成然后继续,但我需要它来显示下载进度和下载字节和类似的东西......
附:抱歉,如果这令人困惑,因为很难解释,谢谢。
【问题讨论】:
-
尝试使用
await wc.DownloadFileTaskAsync(...)而不是wc.DownloadFileAsync(),尽管从documentation 中不清楚在这种情况下是否会触发事件。如果他们不这样做,您要么在通话后有一个DoEvents循环,要么切换到HttpClient和implement progress yourself。 -
@GSerg 成功了,谢谢!
标签: vb.net visual-studio webclient