这是Windows 8.1的问题吗? client.DownloadFile操作超时失败

时间:2014-05-17 19:53:22

标签: c# .net windows-8.1

好吧我正在使用Windows 7.我的软件工作非常顺利。

但是我想移动Windows 8.1,因为它是最新版本。

然而到目前为止,我对程序员方面不满意。

当我在Windows 7中使用visual studio 2012时,这段代码运行得非常好。

client.DownloadFile(uri,path);

然而,现在在带有Visual Studio 2013 Update 2 RC的Windows 8.1上,操作超时会失败。

然而,我将client.DownloadFile更改为以下功能,并且它再次运行良好。

private static void DownloadRemoteImageFile(string uri, string fileName)
{
    var request = (HttpWebRequest)WebRequest.Create(uri);
    request.Timeout = 30000;
    request.AllowWriteStreamBuffering = false;

    using (var response = (HttpWebResponse)request.GetResponse())
    using (var s = response.GetResponseStream())
    using (var fs = new FileStream(fileName, FileMode.Create))
    {
        byte[] buffer = new byte[4096];
        int bytesRead;
        while ((bytesRead = s.Read(buffer, 0, buffer.Length)) > 0)
        {
            fs.Write(buffer, 0, bytesRead);
            bytesRead = s.Read(buffer, 0, buffer.Length);
        }
    }
}

所以任何人对此都有任何想法吗?

我应该回到Windows 7吗?

感谢您的回答

1 个答案:

答案 0 :(得分:1)

是的,在Win 8.1 VS2013 Update 2上使用“ HttpWebRequest ”时遇到此问题

这就是我解决问题的方法:使用 WebClient 代替它不会超时。

public class MyWebClient : WebClient {
    protected override WebRequest GetWebRequest(Uri uri) {
        WebRequest w = base.GetWebRequest(uri);
        w.Timeout = 30000; // the only way to set the timeout is through overriding the base class.
        return w;
    }
}

然后:

MyWebClient c = new MyWebClient();
c.DownloadFile(url,filename);