Wpf 使用FtpWebRequest上载Progressbar

Wpf 使用FtpWebRequest上载Progressbar,wpf,ftpwebrequest,Wpf,Ftpwebrequest,我有一个程序,当文件被放到表单上时,它会将文件上传到服务器上,这样我们的客户就可以轻松地将大文件发送给我们。 我让它大部分工作,但我想有一个进度条,让用户知道它的工作,而不是让它只是坐在那里5分钟,而文件在后台悄悄上传 我会很高兴有进度条脉冲,这样看起来程序正在工作,而不是冻结。如果我能显示实际状态,那就更好了 我的代码: Private Sub Grid1_Drop(sender As System.Object, e As System.Windows.DragEventArgs) Hand

我有一个程序,当文件被放到表单上时,它会将文件上传到服务器上,这样我们的客户就可以轻松地将大文件发送给我们。 我让它大部分工作,但我想有一个进度条,让用户知道它的工作,而不是让它只是坐在那里5分钟,而文件在后台悄悄上传

我会很高兴有进度条脉冲,这样看起来程序正在工作,而不是冻结。如果我能显示实际状态,那就更好了

我的代码:

Private Sub Grid1_Drop(sender As System.Object, e As System.Windows.DragEventArgs) Handles Grid1.Drop
    Dim sFileInfo As System.IO.FileInfo
    Dim sStatus As String = ""

    If e.Data.GetDataPresent("FileDrop") Then
        Try
            Dim theFiles() As String = CType(e.Data.GetData("FileDrop", True), String())
            For Each file As String In theFiles
                sFileInfo = New System.IO.FileInfo(file)

                If UploadFile(txtUsername.Text, sFileInfo) Then
                    lstFileList.Items.Add(file & " - Uploaded")
                Else
                    lstFileList.Items.Add(file & " - Upload Failed")
                End If
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End If
End Sub

Public Function UploadFile(ByVal User As String, ByVal oFile As FileInfo) As Boolean
    Dim ftpRequest As FtpWebRequest
    Dim ftpResponse As FtpWebResponse
    Try
        ftpRequest = CType(FtpWebRequest.Create(Base + User + "/" + oFile.Name), FtpWebRequest)
        ftpRequest.Method = WebRequestMethods.Ftp.UploadFile
        ftpRequest.Proxy = Nothing
        ftpRequest.UseBinary = True
        ftpRequest.Credentials = Cred
        ftpRequest.KeepAlive = KeepAlive
        ftpRequest.EnableSsl = UseSSL
        If UseSSL Then ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)
        Dim fileContents(oFile.Length) As Byte
        Using fr As FileStream = oFile.OpenRead
            fr.Read(fileContents, 0, Convert.ToInt32(oFile.Length))
        End Using
        Using writer As Stream = ftpRequest.GetRequestStream
            writer.Write(fileContents, 0, fileContents.Length)
        End Using
        ftpResponse = CType(ftpRequest.GetResponse, FtpWebResponse)
        ftpResponse.Close()
        ftpRequest = Nothing
        Return True
    Catch ex As WebException
        Return False
    End Try
End Function

请看一下后台工作人员类。这将释放您的ui,以便您可以添加进度条控件,并在上载文件时对其进行动画处理

是的,我以前使用过它,我想它可能会在这里派上用场,但我不确定如何让FTPWebRequest报告上载了多少文件。可能需要某种缓冲,但我还没有找到很多好的例子。是的,我倾向于使用字幕风格,或循环进度指示器,向用户显示实际正在发生的事情。如果你上传多个文件,至少每个文件有一个进度,并缩放所有文件=满栏。报告正在进行的文件的名称和文件的大小。