XamarinフォームでHttpClient(SendAsync)を使用してビデオをアップロードするための進捗インジケータを作成しようと努力しています。カスタムHttpContentがビルドされない - アセンブリをAOTできない(mtouch)
アップロード自体は正常に動作し、他のすべてのAPI呼び出しが動作しますが、アップロードの進行状況を追跡するためにカスタムHttpContent
を作成しようとすると、プロジェクトはそれ以上ビルドされません。
エラーMT3001:アセンブリ をAOTことができませんでした '[...]のiOS/OBJ/iPhone /デバッグ/ビルドiphone7.2-10.1.1 /のmTouchキャッシュ//theproject.dllを構築します。' (MT3001)(theproject.iOS)
代わりStreamContentまたはByteArrayContentを使用してプロジェクトをビルドしますが、私はそれは、進行状況を追跡するために働いて得ることができません。私はうまくいけば正しく、ストリームに私のバイトの変換することにより、これを使用
public class ProgressableContent : HttpContent
{
private const int defaultBufferSize = 4096;
private Stream content;
private int progress;
public ProgressableContent(Stream content)
{
this.content = content;
}
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
return Task.Run(async() =>
{
var buffer = new byte[defaultBufferSize];
var size = content.Length;
var uploaded = 0;
using (content) while (true)
{
var length = content.Read(buffer, 0, buffer.Length);
if (length <= 0) break;
uploaded += length;
progress = (int)((float)uploaded/size * 100);
await stream.WriteAsync(buffer, 0, length);
}
});
}
protected override bool TryComputeLength(out long length)
{
length = content.Length;
return true;
}
}
:
//... building httpMessage.
httpMessage.Content = new ProgressableContent(await byteArrayContent.ReadAsStreamAsync());
//...
var response = await _httpClient.SendAsync(httpMessage, Cancellation.Token);
//...
質問(複数可):
コードのスニペットは(これは、最小限の例です) どういうわけかエラーが発生していますか?これを行う「より良い」方法はありますか?
モノタッチが不平を言っているので、これもXamarin.iOSでタグ付けされています。
「Xamarin.iOS」のどのバージョンを使用していますか?インクリメンタルビルドのヘルプを無効にしますか?これとリンクされた問題をチェックアウトしてください:https://bugzilla.xamarin.com/show_bug.cgi?id=43689 – SushiHangover
@SushiHangover Xamarin.iOS ver。 10.2.0.4(Xamarin Indie)では、インクリメンタルビルドが有効になっていません。 – Mackan