2016-11-30 31 views
0

我正在C#中編寫winforms應用程序。在其中一種形式中,有一種將文件上傳到遠程http服務器的功能。如何以不同的形式顯示這兩種形式對用戶操作的響應。 這裏是我的上傳文件的方法:如何在winforms應用程序的單獨窗體中顯示進度?

private void UploadTestFile() 
    { 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(_url); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 
     request.Credentials = new NetworkCredential(_loginName, _password); 
     Stream ftpStream = request.GetRequestStream(); 
     FileStream fileStream = File.OpenRead("test.exe"); 
     byte[] buffer = new byte[1024]; 
     double fileStreamLength = (double)fileStream.Length; 
     int byteRead = 0; 
     double read = 0; 
     do 
     { 
      byteRead = fileStream.Read(buffer, 0, 1024); 
      ftpStream.Write(buffer, 0, byteRead); 
      read += (double)byteRead; 
      int progress = (int)(read/fileStreamLength); 
     } 
     while (byteRead != 0); 
     fileStream.Close(); 
     ftpStream.Close(); 
    } 

回答

0

您可以使用UploadFileAsync

WebClient Uploader = new WebClient(); 

然後在構造函數可以創建這個事件

Uploader.UploadFileCompleted += UploadFileCompletedCallback; 
Uploader.UploadProgressChanged += UploadProgressCallback; 

,並同時上傳進展它會引發事件

private void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e) 
{ 
    BeginInvoke(new MethodInvoker(() => { 
     //Send the values to another form e.ProgressPercentage or e.BytesSent 
      })); 
} 

在上傳

private void UploadFileCompletedCallback(object sender, UploadFileCompletedEventArgs e) 
{ 
    BeginInvoke(new MethodInvoker(() => 
      { 
       //Tell another window or form that File Uploaded. 
      })); 
} 

的完成要調用這個

private void UploadTestFile() 
{ 
    new Thread(() => Uploader.UploadFileAsync(new Uri("http://YourURI.com/toUpload"), "POST", "test.exe").Start(); 
} 
+0

我嘗試這樣的代碼,但它不會上傳文件。它只是顯示進度表並立即關閉它。那麼證書呢? – saidfagan

相關問題