2012-01-25 5 views
1

私は、ユーザーが大きなファイルを簡単に入手できるように、フォームをドロップしたときにサーバーにファイルをアップロードするプログラムを用意しています。 私はほとんどの作業をしていますが、バックグラウンドでファイルが静かにアップロードされている間に、5分間そこに座っているのではなく、ユーザーが作業していることを知るためのプログレスバーを持っています。FtpWebRequestでプログレスバーをアップロードする

プログラムが動作していて、凍結されていないと思われるので、進捗バーのパルスを送って嬉しいです。もし私が実際の状態を示すことができればそれは良いでしょう。

マイコード:

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 

答えて

2

は、バックグラウンドワーカークラスを見てください。 http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspxあなたのUIを解放して、プログレスバーコントロールを追加し、ファイルがアップロードされている間にアニメートできるようにしてください。

+0

昔、私はこれを使っていましたが、 FTPWebRequestをどのくらいファイルがアップロードされたかを報告する方法をよく分かりません。おそらく何らかの種類のバッファが必要になるかもしれませんが、多くの良い例はまだ見つかりません。 – AndyD273

+0

私はマーキースタイル、つまり循環進捗インジケータに固執する傾向があり、実際に何かが起こっていることをユーザーに示すことができます。 – emybob

+1

複数のファイルをアップロードする場合は、少なくともファイルごとに進捗を確認し、すべてのファイルをフルバールにスケーリングします。進行中のファイルの名前とファイルのサイズを報告します。 – Paparazzi

関連する問題