Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 等待下载,直到下载上一个文件_Vb.net_Loops_Asynchronous_Download_Webclient - Fatal编程技术网

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