微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

winforms 进度条未根据 Google Cloud IUploadProgress c# 正确更新

如何解决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 举报,一经查实,本站将立刻删除。