iOS アプリケーションにアップロード進行状況バーを実装しようとしています。私の現在の実装は、この簡単なトリックを行います:
using (Stream requestStream = request.GetRequestStream ()) {
byte[] dataToUpload = this.DataToUpload;
int dataToUploadLength = dataToUpload.Length;
int uploadedSoFar = 0;
while (uploadedSoFar < dataToUploadLength) {
int toUpload = 8192;
if (uploadedSoFar + toUpload > dataToUploadLength) {
toUpload = dataToUploadLength - uploadedSoFar;
}
requestStream.Write (dataToUpload, uploadedSoFar, toUpload);
uploadedSoFar += toUpload;
this.SetUploadedRatio ((float)uploadedSoFar / (float)dataToUploadLength);
}
問題は、約 100KB のデータが送信されるまで requestStream.Write() が瞬時に実行され、その後、より論理的になり、上記の SetUploadedRatio() メソッドが正常に呼び出されることです。ファイルが巨大な場合、これは実際には大したことではありませんが、すぐに数パーセントかかり、その後数パーセント遅くなり始めることがわかります. 低速の接続で 60KB のファイルを送信すると、プログレス バーがすぐに 100% になりますが、実際のアップロードはまったく完了していないため、何が起こっているのかを実際に表示することはできません。
問題を公開する完全なショーケースを作成しました (Monotouch iOS で)。リンクは以下にあります: https://github.com/rFlex/Monotouch-Upload-Showcase
これは興味深いものがある場所です: https://github.com/rFlex/Monotouch-Upload-Showcase/blob/master/TestUpload/Uploader.cs