C#Amazon S3使用进度条上传文件

时间:2015-12-02 17:11:18

标签: c# amazon-s3

我有一个类函数可以将文件上传到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 个答案:

答案 0 :(得分:1)

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

另外,我看到你正在使用进度条的.Invalidate方法。正如文档所说,这种方法在没有Update方法的情况下会强制执行同步绘制。尝试一下。

  

调用Invalidate方法不会强制执行同步绘制;要强制执行同步绘制,请在调用Invalidate方法后调用Update方法。如果在没有参数的情况下调用此方法,则会将整个客户区添加到更新区域。

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

干杯!