我有一个类函数可以将文件上传到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);
控制台显示进度,但进度条无效。我做错了什么?
提前致谢!
答案 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
干杯!