Vb.net 等待下载,直到下载上一个文件
我有一个Vb.net 等待下载,直到下载上一个文件,vb.net,loops,asynchronous,download,webclient,Vb.net,Loops,Asynchronous,Download,Webclient,我有一个数据表,其中包含文件信息。我遍历这个表,一个状态控制这个文件的操作(删除、添加新文件、更新)。在添加新文件和更新的情况下,必须从服务器下载单个文件并保存在文件系统中。这工作正常,没有任何问题 现在有一个新的请求。目前,用户只在最后得到一个提示,文件下载完成。现在,用户希望在下载过程中获得此提示,即下载了多少。我如何实现这一点?必须在上一次下载完成后开始新的文件下载 我当前的代码如下所示: Dim oDownloadFileClient As New System.Net.WebClien
数据表
,其中包含文件信息。我遍历这个表,一个状态控制这个文件的操作(删除、添加新文件、更新)。在添加新文件和更新的情况下,必须从服务器下载单个文件并保存在文件系统中。这工作正常,没有任何问题
现在有一个新的请求。目前,用户只在最后得到一个提示,文件下载完成。现在,用户希望在下载过程中获得此提示,即下载了多少。我如何实现这一点?必须在上一次下载完成后开始新的文件下载
我当前的代码如下所示:
Dim oDownloadFileClient As New System.Net.WebClient
For Each Row As DataRow In fileTable.Rows
Console.WriteLine(String.Format("Start processing file {0}", Row("FileName").Value))
Select Case Row("State").Value
Case 0
'delete file
Case 1 'new file
Try
'download file
Dim oFile As Byte() = oDownloadFileClient.DownloadData("<DownloadPath>")
System.IO.File.WriteAllBytes(FileName, oFile)
Console.WriteLine(String.Format("File {0} saved.", Row("FileName").Value))
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Case 2, 3 'update file
Try
Dim oFile As Byte() = oDownloadFileClient.DownloadData("<DownloadPath>")
System.IO.File.WriteAllBytes(FileName, oFile)
Console.WriteLine(String.Format("File {0} updated.", Row("FileName").Value))
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Case Else
End Select
Next
将其保存为
字节
数组,然后将其写入文件是无用的。只需执行oDownloadFileClient.DownloadFileAsync(“,FileName)
,。--至于您的问题,您可以使用事件及其中的属性。如果我尝试这样做,程序不会等到文件下载(因为它是异步的)。在这个命令之后,我添加了一个while循环,检查oDownloadFileClient.IsBusy
,从而在下载下一个文件之前下载该文件。现在我遇到的问题是,在命令行中首先显示文件已保存(对于列表中的每个文件),然后显示DownloadProgressChanged
事件的输出。我如何解决这个问题,首先是文本,即下载是startet,然后是事件的百分比,最后是完成的百分比?好吧,如果您不想异步执行,那么将其更改为DownloadFile(…
。但是如果这样做,您将冻结主UI,这将导致不显示下载进度。“并且在下载完成后?
”-您可以对进行一些研究。提示:每个下载方法都有自己的事件。请确保选择正确的方法。:)现在它可以异步工作。这是我实现方法中的一个错误。我重新组织了源代码,现在下载了一个文件,之后将开始下一个文件。还显示了进度。感谢提示:D
Dim oDownloadFileClient As New System.Net.WebClient
AddHandler oDownloadFileClient.DownloadProgressChanged, AddressOf DownloadProgressCallback
For Each Row As DataRow In fileTable.Rows
Console.WriteLine(String.Format("Start processing file {0}", Row("FileName").Value))
Select Case Row("State").Value
Case 0
'delete file
Case 1 'new file
Try
'download file
oDownloadFileClient.DownloadFileAsync("<DownloadPath>", FileName)
While (oDownloadFileClient.IsBusy)
End While
Console.WriteLine(String.Format("File {0} saved.", Row("FileName").Value))
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Case 2, 3 'update file
Try
oDownloadFileClient.DownloadFileAsync("<DownloadPath>", FileName)
While (oDownloadFileClient.IsBusy)
End While
Console.WriteLine(String.Format("File {0} updated.", Row("FileName").Value))
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Case Else
End Select
Next
Private Sub DownloadProgressCallback(sender As Object, e As Net.DownloadProgressChangedEventArgs)
Console.WriteLine(String.Format("{0}% downloaded"), e.ProgressPercentage)
End Sub