繁体   English   中英

C# Amazon S3 上传带有进度条的文件

[英]C# Amazon S3 Upload file with progressbar

我有一个用于将文件上传到 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);

控制台显示进度,但进度条不起作用。 我究竟做错了什么?

提前致谢!

我相信您正在使用进度条创建Windows Form应用程序。 因此,请查看以下内容: http : //www.dotnetperls.com/progressbar

另外,我看到您正在使用Progressbar的.Invalidate方法。 如文档所述,此方法确实强制执行同步绘制,而没有Update方法。 试试看。

调用Invalidate方法不会强制执行同步绘制。 要强制执行同步绘制,请在调用Invalidate方法之后调用Update方法。 当不带任何参数调用此方法时,整个客户区将添加到更新区域。

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

干杯!

问题是你不能从与 UI 线程不同的线程访问 System.Windows.Forms.Control 的成员会导致跨线程异常。 只有一个线程(UI 线程)允许访问 System.Windows.Forms.Control 及其子类成员。

要解决这个问题,您必须像这样使用 Invoke 方法:

this.BeginInvoke(new Action(() =>
{
    this.progressBarUpload.Value = pctProgress;
}));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM