Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
.net 如何添加progressbar以跟踪FTP的上载_.net_Vb.net_Ftp - Fatal编程技术网

.net 如何添加progressbar以跟踪FTP的上载

.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 =

我目前正在开发FTP类型的程序,可以同时发送很多文件,我设法找到了一些旧代码,我对它进行了多次编辑。无论如何,我仍在学习,我试图让progressbar正常工作,但我做不到,我的代码有什么问题:

  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以获取主文件的估计下载时间。