.net 如何添加progressbar以跟踪FTP的上载
我目前正在开发FTP类型的程序,可以同时发送很多文件,我设法找到了一些旧代码,我对它进行了多次编辑。无论如何,我仍在学习,我试图让progressbar正常工作,但我做不到,我的代码有什么问题:.net 如何添加progressbar以跟踪FTP的上载,.net,vb.net,ftp,.net,Vb.net,Ftp,我目前正在开发FTP类型的程序,可以同时发送很多文件,我设法找到了一些旧代码,我对它进行了多次编辑。无论如何,我仍在学习,我试图让progressbar正常工作,但我做不到,我的代码有什么问题: Private Sub BackgroundWorker1_DoWork(sender As Object, e As ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Dim hInet As Int32 =
Private Sub BackgroundWorker1_DoWork(sender As Object, e As ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim hInet As Int32 = InternetOpen("nn:", 1, vbNullString, vbNullString, 0)
Dim hFtpSession As IntPtr = InternetConnect(hInet, "IPADDRESS", 21, "USERNAME", "PASSWORD", 1, 0, 0)
For Each f As String In IO.Directory.GetFiles(FlatTextBox1.Text + "Files\")
Dim fi As New IO.FileInfo(f)
FtpPutFile(hFtpSession, f, fi.Name, 0, 0)
Next
Dim fileStream() As Byte = System.IO.File.ReadAllBytes(FlatTextBox1.Text + "Files\")
Dim requestStream As System.IO.Stream = hInet.GetRequestStream() ' Here is my first issue.
For offset As Integer = 0 To fileStream.Length Step 1024
BackgroundWorker1.ReportProgress(CType(offset * ProgressBar1.Maximum / fileStream.Length, Integer))
Dim chSize As Integer = fileStream.Length - offset
If chSize > 1024 Then chSize = 1024
requestStream.Write(fileStream, offset, chSize)
Next
InternetCloseHandle(hInet)
FlatAlertBox1.Visible = True
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
与使用subBackgroundWorker1_ProgressChanged不同,您可以通过某种方式获得上传速度(上传1 KB、MB等所需的时间),并使用计时器使用信息增加进度条。当程序启动时,只需让它上传一个小文件,并记录上传所需的时间。或者你也可以在开始上传之前完成。这样,您就不必依赖于BackgroundWorker1.progrschanged已更改,另外,您还可以实现一个估计的上载时间。
寻求调试帮助的问题(“此代码为什么不工作?”)必须包括所需的行为,一个特定的问题或错误…
但我不能,所以不太明白there@Plutonix嘿抱歉,我忘了提及,但当我调试代码并上传文件时,它不会影响progressbar值。您是否将WorkerReportsProgress
设置为true?@puropoix是的,我尝试过,但它没有改变我认为FtpPutFile(hFtpSession,f,fi.Name,0,0)之后的任何内容你的进度从0..1开始,而不是0..100。乘以100。希望你意识到我的网速和别人不一样,所以记录上传是愚蠢的。怎么做?上传将在程序启动时开始,计时器可以记录在程序其余部分使用它作为变量所花费的时间。好的,我会尝试制作一个(这一个将下载而不是上传,但核心思想是一样的)我会在完成后发布一个链接。好的,我完成了,这里有一个链接:它没有进度条,但是有可以在你的程序中使用的通用代码。单击KBS以获取主文件的估计下载时间。