Imports System.Net Public Class MainForm Dim ftpFilePath As String = Nothing Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load Control.CheckForIllegalCrossThreadCalls = False End Sub Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click Dim newFile As New OpenFileDialog If newFile.ShowDialog = Windows.Forms.DialogResult.OK Then txtFilePath.Text = newFile.FileName ftpFilePath = txtFTPServer.Text & "/" & IO.Path.GetFileName(txtFilePath.Text) End If End Sub Private Sub btnUpload_Click(sender As Object, e As EventArgs) Handles btnUpload.Click bWorker.RunWorkerAsync() End Sub Private Sub bWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bWorker.DoWork Dim request As FtpWebRequest = DirectCast(WebRequest.Create(New Uri(ftpFilePath)), FtpWebRequest) request.Method = WebRequestMethods.Ftp.UploadFile request.Credentials = New NetworkCredential(txtFTPUsername.Text, FTPPassword.Text) request.UseBinary = True request.UsePassive = False Dim fileStream() As Byte = System.IO.File.ReadAllBytes(txtFilePath.Text) Dim requestStream As System.IO.Stream = request.GetRequestStream() For offset As Integer = 0 To fileStream.Length Step 1024 bWorker.ReportProgress(CType(offset * pBar.Maximum / fileStream.Length, Integer)) Dim chSize As Integer = fileStream.Length - offset If chSize > 1024 Then chSize = 1024 requestStream.Write(fileStream, offset, chSize) Next requestStream.Close() requestStream.Dispose() End Sub Private Sub bWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bWorker.ProgressChanged pBar.Value = e.ProgressPercentage lblPercent.Text = e.ProgressPercentage & " %" End Sub Private Sub bWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bWorker.RunWorkerCompleted MsgBox("Finish uploading!") End Sub End Class