2015-12-02 236 views
0

文件我上传一类功能的文件,以S3:C#亚马逊S3上传与进度

public void UploadFile(string filePath, UploadProgress uploadProgress) 
    { 
     TransferUtilityUploadRequest uploadRequest; 
     TransferUtility fileTransferUtility; 

     try 
     { 
      mClient = new AmazonS3Client(Amazon.RegionEndpoint.EUWest1); 

      uploadRequest = 
       new TransferUtilityUploadRequest 
       { 
        BucketName = BUCKETNAME, 
        FilePath = filePath 
       }; 

      uploadRequest.UploadProgressEvent += new EventHandler<UploadProgressArgs>(uploadProgress); 

      fileTransferUtility = new TransferUtility(mClient); 
      fileTransferUtility.Upload(uploadRequest); 
     } 
     catch (AmazonS3Exception s3Exception) 
     { 
      throw s3Exception; 
     } 
    } 

从窗体类,我有更新功能的进度:

private void UploadFile_ProgressBar(object sender, UploadProgressArgs e) 
    { 
     int pctProgress = (int)(e.TransferredBytes * 100/e.TotalBytes); 
     progressBarUpload.Value = pctProgress; 
     progressBarUpload.Invalidate(); 

     Console.WriteLine(e.TransferredBytes + "/" + e.TotalBytes + Environment.NewLine);    
    } 

并且上传文件的电话号码为:

mS3.UploadFile(fileToUpload, UploadFile_ProgressBar); 

控制台显示进度,但进度条无效。我究竟做错了什么?

提前致谢!

回答

1

我相信你正在用你的进度条创建一个Windows窗体应用程序。 所以,看看这个: http://www.dotnetperls.com/progressbar

另外,我看到你正在使用进度条的.Invalidate方法。正如文档所述,这种方法确实强制同步绘制,没有Update方法。试试看。

调用Invalidate方法不强制同步绘画;要强制同步绘画,请在调用Invalidate方法后调用Update方法。当不使用参数调用此方法时,整个客户区将被添加到更新区域。

https://msdn.microsoft.com/en-us/library/598t492a(v=vs.100).aspx

干杯!