1

UploadFileAsyncメソッドを使用して、Web クライアントを使用して比較的大きなファイル (40 MB)をアップロードしています。

エミュレータでこれをテストしているので、接続速度は非常に高速です。UploadProgressChangedが頻繁に呼び出され、約 20 秒以内に 100% に達することがわかります。

ただし、UploadFileCompletedはさらに12 分間呼び出されません!!

小さいファイル (たとえば 500kb) をアップロードすると、アップロードの進行状況が 100% に達するとすぐにUploadFileCompletedが呼び出されます。

これがスレッドと関係があるのだろうか?しかし、私はどのように想像することはできません。

Web サーバーに関しては、UploadFileCompletedが呼び出される 1 分前ではなく、呼び出されたときに正式にファイルを受け取ります。したがって、私の他の考えは、UploadProgressChangedが間違っているということです。

誰にもアイデアはありますか?

4

1 に答える 1

3

投稿する前にもう少し深く調べるべきでした。

アップロードがこれほど迅速に行われるのは奇妙だと思いました。何が起こっているかというと、アプリは「これをアップロードしてください!」と言っています。Androidは「OK!」と言っています..アップロードされたと思います。しかし、それはアンドロイドと一緒にキューに座っているだけです。

ここに修正があります:

https://bugzilla.xamarin.com/show_bug.cgi?id=3100

基本的には、WebClient を継承して getwebrequest をオーバーライドし、AllowWriteStreamBufferingを false に設定します。これが私の簡単なコードです:

public class MyWebClient : WebClient
{
    long contentLength;

    protected override WebRequest GetWebRequest(Uri address)
    {
        var req = base.GetWebRequest(address) as HttpWebRequest;
        req.AllowWriteStreamBuffering = false;
        req.ContentLength = contentLength;
        return req;
    }

    public MyWebClient(long contentLength)
    {
        this.contentLength = contentLength;
    }
}
于 2012-08-25T07:29:36.593 に答える