Visual Basic 中的 Web 客户端问题
Issue with Web Client in Visual Basic
我决定为我的工具添加一些下载选项,使用它的人开始报告他们在程序尝试下载文件并安装它们时遇到错误。
这是我使用的代码:
Private Sub DownloadFiles()
Dim Locales As WebClient = New WebClient
AddHandler Locales.DownloadProgressChanged, AddressOf Locales_ProgressChanged
AddHandler Locales.DownloadFileCompleted, AddressOf Locales_DownloadCompleted
Label2.Text = "Status: Downloading files..."
Locales.DownloadFileAsync(New Uri("http://updatesz.ucoz.com/ChangeServer.zip"), DirectoryToInstall & "\ChangeServer.zip")
End Sub
Private Sub Locales_ProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
NsProgressBar1.Value = e.ProgressPercentage
Dim bytesIn As Double = Double.Parse(e.BytesReceived.ToString())
Dim totalBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString())
Dim percentage As Double = bytesIn / totalBytes * 100
NsProgressBar1.Value = Int32.Parse(Math.Truncate(percentage).ToString())
End Sub
Private Sub Locales_DownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Label2.Text = "Status: Preparing..."
NsProgressBar1.Value = 0
DirectoryToInstall = GameDir.Text
BackgroundWorker.WorkerReportsProgress = True
Dim A As String() = {DirectoryToInstall, GameDir.Text}
BackgroundWorker.RunWorkerAsync(A)
End Sub
我的按钮只是:DownloadFiles()
然后它从那里开始......我得到的错误是,好像程序找不到下载的 .zip 文件!
另一个有趣的因素是,程序没有在第一个 运行 上找到下载的 .zip 文件!如果您第二次下载这些相同的文件,它工作正常...
所以我得出了一个结论。该程序下载 .zip 文件并急于解压缩 - 这会导致混乱。 .zip 并没有完全写入。但 Web 客户端已将其报告为已下载。
下载结束后我尝试使用Threading.Thread.Sleep(3000)
。确保文件到达计算机 "all the way" 但它没有修复 :(
所以我需要一些帮助!
我现在就要搞乱代码了!如果我发现任何有趣的东西(也许是某种类型的修复,我会在下面 post)
先谢谢你:) !
我将代码切换为:
My.Computer.Network.DownloadFile(("http://updatesz.ucoz.com/ChangeServer.zip"), DirectoryToInstall & "\ChangeServer.zip")
...并将代码添加到我已经内置的另一个进度条中!虽然这不是我的目标,但完成后我非常喜欢它。
我决定为我的工具添加一些下载选项,使用它的人开始报告他们在程序尝试下载文件并安装它们时遇到错误。
这是我使用的代码:
Private Sub DownloadFiles()
Dim Locales As WebClient = New WebClient
AddHandler Locales.DownloadProgressChanged, AddressOf Locales_ProgressChanged
AddHandler Locales.DownloadFileCompleted, AddressOf Locales_DownloadCompleted
Label2.Text = "Status: Downloading files..."
Locales.DownloadFileAsync(New Uri("http://updatesz.ucoz.com/ChangeServer.zip"), DirectoryToInstall & "\ChangeServer.zip")
End Sub
Private Sub Locales_ProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
NsProgressBar1.Value = e.ProgressPercentage
Dim bytesIn As Double = Double.Parse(e.BytesReceived.ToString())
Dim totalBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString())
Dim percentage As Double = bytesIn / totalBytes * 100
NsProgressBar1.Value = Int32.Parse(Math.Truncate(percentage).ToString())
End Sub
Private Sub Locales_DownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Label2.Text = "Status: Preparing..."
NsProgressBar1.Value = 0
DirectoryToInstall = GameDir.Text
BackgroundWorker.WorkerReportsProgress = True
Dim A As String() = {DirectoryToInstall, GameDir.Text}
BackgroundWorker.RunWorkerAsync(A)
End Sub
我的按钮只是:DownloadFiles()
然后它从那里开始......我得到的错误是,好像程序找不到下载的 .zip 文件!
另一个有趣的因素是,程序没有在第一个 运行 上找到下载的 .zip 文件!如果您第二次下载这些相同的文件,它工作正常...
所以我得出了一个结论。该程序下载 .zip 文件并急于解压缩 - 这会导致混乱。 .zip 并没有完全写入。但 Web 客户端已将其报告为已下载。
下载结束后我尝试使用Threading.Thread.Sleep(3000)
。确保文件到达计算机 "all the way" 但它没有修复 :(
所以我需要一些帮助!
我现在就要搞乱代码了!如果我发现任何有趣的东西(也许是某种类型的修复,我会在下面 post)
先谢谢你:) !
我将代码切换为:
My.Computer.Network.DownloadFile(("http://updatesz.ucoz.com/ChangeServer.zip"), DirectoryToInstall & "\ChangeServer.zip")
...并将代码添加到我已经内置的另一个进度条中!虽然这不是我的目标,但完成后我非常喜欢它。