0

私は自分でこれをやろうとしていましたが、助けが必要な状況に遭遇しました。プログレスバー コントロールを使用して、FTP ファイルのアップロードの現在の進行状況を表示したいと考えています。

現在、私はプログレスバー コントロールの値を手動で変更していますが、おそらくより良い、またはより単純なアプローチがあると思わずにはいられませんでした。現在は機能していますが、進行状況バーは、実行中のコードの部分に基づいて進行状況を示す点で散発的です。また、サブ全体を別のスレッドにスローしようとしましたが、それを行ったときにプログレスバーがコードの最後まで表示されないことに気付きました。その後、一時的に点滅して再び非表示になります。

これが私がこれまでに行ったことです。

Public Sub uploadAuthorization()

    ProgressBar1.Show()
    Dim fileName As String = Path.GetFileName(TextBoxFilePath.Text)
    Dim ftpFolder As String = "authorizations"

    Try
        'Create FTP Request
        Me.Cursor = Cursors.WaitCursor
        Dim myRequest As FtpWebRequest = DirectCast(WebRequest.Create(ftpServer + "/" + ftpFolder + "/" + fileName), FtpWebRequest)
        ProgressBar1.Value = 20

        'Update properties
        myRequest.Credentials = New NetworkCredential(ftpUsername, ftpPassword)
        myRequest.Method = WebRequestMethods.Ftp.UploadFile
        ProgressBar1.Value = ProgressBar1.Value + 20

        'Read the file
        Dim myFile As Byte() = File.ReadAllBytes(TextBoxFilePath.Text)
        ProgressBar1.Value = ProgressBar1.Value + 20

        'Upload the file
        Dim myStream As Stream = myRequest.GetRequestStream()
        myStream.Write(myFile, 0, myFile.Length)
        ProgressBar1.Value = ProgressBar1.Value + 20

        'Cleanup
        myStream.Close()
        myStream.Dispose()
        ProgressBar1.Value = ProgressBar1.Value + 20

    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information)
    End Try
    Me.Cursor = Cursors.Arrow
End Sub
4

1 に答える 1

0

またあったね、

アンドリュー・モートンによる提案された読書に基づいて、これが私が解決策として思いついたものであり、それは魅力のように機能します. 唯一の問題は、FtpWebRequest クラスが提供する UploadFileWithUniqueName メソッドを WebClient クラスがサポートしていないことです。ランダムなファイル名を使用する機会を与えてくれたので、これは本当に気に入りましたが、進行状況バーを機能させることは公正なトレードオフだと思います.

だからここに解決策があります:


Private WithEvents myFtpUploadWebClient As New WebClient

Private Sub ButtonChooseFile_Click(sender As System.Object, e As System.EventArgs) Handles ButtonChooseFile.Click

    If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        OpenFileDialog1.Title = "Please choose the Authorization File"
        TextBoxFilePath.Text = OpenFileDialog1.FileName
        ProgressBar1.Show()
        Me.Cursor = Cursors.WaitCursor

        Dim myUri As New Uri(ftpServer & OpenFileDialog1.SafeFileName)
        myFtpUploadWebClient.Credentials = New System.Net.NetworkCredential(ftpUsername, ftpPassword)
        myFtpUploadWebClient.UploadFileAsync(myUri, OpenFileDialog1.FileName)
    End If

End Sub

Private Sub myFtpUploadWebClient_UploadFileCompleted(sender As Object, e As System.Net.UploadFileCompletedEventArgs) Handles myFtpUploadWebClient.UploadFileCompleted

    If e.Error IsNot Nothing Then
        MessageBox.Show(e.Error.Message)
    Else
        Me.Cursor = Cursors.Default
        MessageBox.Show("Authorization Form Uploaded Successfully!")
    End If
End Sub

Private Sub myFtpUploadWebClient_UploadProgressChanged(sender As Object, e As System.Net.UploadProgressChangedEventArgs) Handles myFtpUploadWebClient.UploadProgressChanged
    ProgressBar1.Value = e.ProgressPercentage
End Sub
于 2013-03-04T03:27:50.667 に答える