title: Upload Progressbar with FtpWebRequest
body: <p>I have a program that uploads files to our server when they are dropped over the form, to make it easy for our customers to get large files to us.
  I have it mostly working, but I want to have a progress bar so that the user knows it's working, instead of having it just sit there for 5 minutes while the files upload quietly in the background.</p>
  
  <p>I would be happy to just have the progress bar pulse so it looks the program is working, and not frozen. If I can show actual status then that would be better.</p>
  
  <p>My code:</p>
  
  <pre><code>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 &amp; " - Uploaded")
                  Else
                      lstFileList.Items.Add(file &amp; " - 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
  </code></pre>