我正在尝试从Internet下载一堆HTML文件,并使用HTTPWebRequest进行此操作。

但是当我使用

webrequest.create(“http://www.stackoverflow.com/“); webrequest.getResponse();

httpwebresponse.contentlength始终为-1。我必须显示这些页面下载的进度,在我们现有的VB6版本中,我们正在使用INET控件,并且它报告了进度。

我的代码与此非常相似:

http://www.geekpedia.com/tutorial179_creating-a-download-manager-in-charp.html

(“下载”方法是)

我不确定我在做什么错或它是否正常 - 没有网络服务器发送的内容长度。在这种情况下,我们如何锻炼进度?

谢谢,

有帮助吗?

解决方案

这是使用的示例 Webclient 您可以尝试:

class Program
{
    static void Main(string[] args)
    {
        var client = new WebClient();
        client.DownloadProgressChanged += (sender, e) =>
        {
            Console.WriteLine("{0}% completed", e.ProgressPercentage);
        };
        client.DownloadStringCompleted += (sender, e) =>
        {
            // e.Result contains downloaded string
            Console.WriteLine("finished downloading...");
        };
        client.DownloadStringAsync(new Uri("http://www.stackoverflow.com"));
        Console.ReadKey();
    }
}

如果您决定在Winforms应用程序中使用它,请确保您致电 IndokeRequied/调用 事件处理程序的模式由于未在UI线程上执行。

其他提示

如果Web服务器未发送内容长度,则无法知道还有更多数据,因此基本上不可能知道您的距离是多远。

哎呀,服务器可能会动态生成数据和 仍然 不知道(当您获得数据的第一部分时)它必须发送多少数据。

任何东西 主张 要显示进度(作为完整下载尺寸的比例)要么是在撒谎,要么以不同的方式下载数据 给他们全尺寸。当然,如果您要下载多个文件,您总是可以说您已经下载了多少个文件以及您仍必须下载多少个文件(尽管在这种情况下,即使您在执行此操作,也可能不知道您是否在这样做爬行者式应用程序)。

请注意,一种常见的方法是显示一个进度栏,该方法表明“我正在取得进步”,但没有试图猜测要下载多少。

链接文章中的下载()方法中的代码依赖于同类的私人成员,因此

WebRequest.Create("http://www.stackoverflow.com");

可能会编译,它实际上是在调用 班级 WebRequest,然后丢弃结果,这是请求实际存储的地方。到线

WebRequest.GetResponse();

被称为,该代码忘记了create()响应的全部内容。 (C#是案例敏感的,因此WebRequest和WebRequest不是同一回事;并且将名称WebRequest的名称命名为WebRequest类的实例是非常常规的。)

因此,尝试将线条

private HttpWebRequest webRequest;
private HttpWebResponse webResponse;

作为WebRequest和Webresponse对象的实例,在类顶部的方法之外。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top