Xamarin.android 使用monodroid上载大型文件

Xamarin.android 使用monodroid上载大型文件,xamarin.android,Xamarin.android,我使用webclient通过UploadFileAsync方法上传一个相对较大的文件(40mb) 当我在模拟器上测试时,连接速度非常快。我可以看到,UploadProgressChanged经常被调用,并且在大约20秒内达到100% 但是,上传文件已完成在另一12分钟内不会被调用 如果我上传一个较小的文件(比如500kb),UploadFileCompleted几乎在上传进度达到100%时就会被调用 我想知道这是否与线程有关?但我无法想象如何 就web服务器而言,它在调用UploadFileCo

我使用webclient通过UploadFileAsync方法上传一个相对较大的文件(40mb)

当我在模拟器上测试时,连接速度非常快。我可以看到,UploadProgressChanged经常被调用,并且在大约20秒内达到100%

但是,上传文件已完成在另一12分钟内不会被调用

如果我上传一个较小的文件(比如500kb),UploadFileCompleted几乎在上传进度达到100%时就会被调用

我想知道这是否与线程有关?但我无法想象如何

就web服务器而言,它在调用UploadFileCompleted时正式接收文件,而不是在一分钟之前。因此,我的另一个想法是,上传的progresschanged是错误的


有人有什么想法吗?

在发帖之前应该看得更深一点

我觉得上传这么快很奇怪。现在的情况是,应用程序显示“上传此文件!”安卓正在说‘好!’。。它认为已经上传了。但它只是和安卓一起排队

这里有一个修正:

基本上,从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;
    }
}

此修复程序也适用于其他平台(例如Linux上的Mono)。