如何解决winforms 进度条未根据 Google Cloud IUploadProgress c# 正确更新
所以我使用 UploadobjectAsync
将对象上传到 Google Cloud Storage。我使用 IUploadProgress.Status
更新进度条,但进度条似乎没有与上传状态正确同步。基本上,当上传完成时,我会更改标签的文本,显示“上传完成”。当上传完成时会发生这种情况,但有时进度条仍然是空的(之后会填满)。我不知道 Completed
状态是否会很快更新进度条。
public async void UploadAsync(string projectID,string bucketName,GoogleCredential credentials,string filePath,string _objectName,StringBuilder _objectData,List<string> _MetaData,string objectName = null)
{
// Instantiates a client.
using (var storageClient = Google.Cloud.Storage.V1.StorageClient.Create(credentials))
{
try
{
string[] lines = _objectData.ToString().Split(new[] { Environment.NewLine },StringSplitOptions.RemoveEmptyEntries);
using (var memStream = new MemoryStream())
using (var memStream2 = new MemoryStream())
using (var streamWriter = new StreamWriter(memStream))
using (var streamWriter2 = new StreamWriter(memStream2))
using (var csvWriter = new CsvWriter(streamWriter,CultureInfo.InvariantCulture) )
{
//for data.csv
foreach (var line in lines)
{
string[] lineItems = line.Split(',');
foreach (var singleItem in lineItems) {
csvWriter.WriteField(singleItem);
}
csvWriter.NextRecord();
}
streamWriter.Flush(); //always flush streamWriter after writing
memStream.Position = 0;
foreach (var entry in _MetaData)
{
streamWriter2.WriteLine(entry);
}
streamWriter2.Flush();
memStream2.Position = 0;
using (FileStream fileMeta = new FileStream(_objectName + "Meta.txt",FileMode.Create,FileAccess.Write))
{
memStream2.copyTo(fileMeta);
}
setMax((int)(memStream.Length + memStream2.Length)); //sets progress bar max to be length of both memory streams
// set minimum chunksize just to see progress updating
var uploadobjectOptions = new Google.Cloud.Storage.V1.UploadobjectOptions
{
ChunkSize = Google.Cloud.Storage.V1.UploadobjectOptions.MinimumChunkSize
};
// Hook up the progress callback
var progressReporter = new Progress<Google.Apis.Upload.IUploadProgress>(OnUploadProgress);
Console.WriteLine(bucketName);
Console.WriteLine("objectName" + objectName);
bucketName = "csv-upload-bucket";
/*storageClient.Uploadobject*/
await storageClient.UploadobjectAsync(
bucketName,_objectName + ".csv","application/csv",memStream,uploadobjectOptions,progress: progressReporter).ConfigureAwait(true);
await storageClient.UploadobjectAsync(
bucketName,_objectName + "Meta.txt","application/text",memStream2,progress: progressReporter).ConfigureAwait(true);
}
}
catch (Google.GoogleApiException e)
when (e.Error.Code == 409)
{
// When creating the bucket - The bucket already exists. That's fine.
Console.WriteLine(e.Error.Message);
}
catch (Exception e)
{
// other exception
Console.WriteLine(e.Message);
}
}
}
void OnUploadProgress(Google.Apis.Upload.IUploadProgress progress)
{
switch (progress.Status)
{
case Google.Apis.Upload.UploadStatus.Starting:
setMin(0); //sets progress bar value to 0
UpdateProgressBar(0);
break;
case Google.Apis.Upload.UploadStatus.Completed:
UpdateProgressBar(getMax()); //sets progress bar value to max
setResultLabelText("Upload completed");
setLoadCompleteBttnEnabled(true); //enables OK bttn
setCancelLoadBttnEnabled(false);
break;
case Google.Apis.Upload.UploadStatus.Uploading:
UpdateProgressBar((int)progress.BytesSent);
setLoadCompleteBttnEnabled(false);
setCancelLoadBttnEnabled(true);
Console.WriteLine("busy uploading"); //this never seems to be called
break;
case Google.Apis.Upload.UploadStatus.Failed:
setResultLabelText("Upload Failed");
Console.WriteLine(Environment.NewLine + progress.Exception);
break;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。