Загрузить Progressbar с помощью FtpWebRequest - PullRequest
1 голос
/ 25 января 2012

У меня есть программа, которая загружает файлы на наш сервер, когда они перетаскиваются через форму, чтобы нашим клиентам было легко получать большие файлы для нас. У меня это в основном работает, но я хочу иметь индикатор выполнения, чтобы пользователь знал, что он работает, вместо того, чтобы просто сидеть там в течение 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

1 Ответ

2 голосов
/ 25 января 2012

Посмотрите на фон рабочего класса. http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx, который освободит ваш пользовательский интерфейс, чтобы вы могли добавить элемент управления индикатором выполнения и анимировать его во время загрузки файлов

...