线程池ThreadStart和完成的问题xamarin iOS

时间:2018-10-22 10:30:31

标签: c# amazon-web-services amazon-s3 xamarin.ios awss3transferutility

我正在尝试在Xamarin iOS iPad App中下载大小为85MB的XML文件。有时下载成功完成,但其他时候下载挂起之间没有任何错误。进度停止。

AWS SDK版本:

AWSSDK.S3 3.3.25.1

AWSSDK.Core 3.3.27.3

我尝试了两种方法。这是我的代码:

1- GetObject

development

2- TransferUtility

            var  clientRequest = new AmazonS3Client(AWSAccessKey,
                                    AWSSecretKey,
                                        Amazon.RegionEndpoint.USEast1);
            try
            {
                GetObjectRequest request = new GetObjectRequest
                {
                    BucketName = AWSBucketName,
                    Key = Path + "File1.xml"
                };
                using (GetObjectResponse response = await clientRequest.GetObjectAsync(request))
                {
                 response.WriteObjectProgressEvent += displayDownloadProgress;
                 await response.WriteResponseStreamToFileAsync(destPath, false);                        
                }
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }

我还要附加应用程序输出日志。输出日志显示线程问题。当线程在下载过程之间开始完成时,则下载未成功完成。但是,如果线程中没有任何活动,则下载成功。

            var utility = new TransferUtility(cas.AWSAccessKey,
                                cas.AWSSecretKey,
                                Amazon.RegionEndpoint.USEast1);

            TransferUtilityDownloadRequest dr = new TransferUtilityDownloadRequest();
            dr.BucketName = AWSBucketName;
            dr.Key = Path + "File1.xml";
            dr.FilePath = destPath;
            dr.WriteObjectProgressEvent += displayDownloadProgress;
            await utility.DownloadAsync(dr);



            public void displayDownloadProgress(object sender, WriteObjectProgressArgs args)
            {
                Debug.WriteLine("Download Progress: " + (args.PercentDone));

                InvokeOnMainThread(() =>
                {
                    BTProgressHUD.ShowContinuousProgress("Download Progress: " + args.PercentDone.ToString() + "%", ProgressHUD.MaskType.Gradient);
                });

                if (args.PercentDone >= 100)
                {
                    BTProgressHUD.Dismiss();
                }
            }

0 个答案:

没有答案