等待webrequest完成

时间:2011-04-05 20:28:18

标签: asp.net

此功能可从源下载图像并将其添加到zip文件中。 问题是有时图像全部搞砸了(下载1/3,其余是空白),好像下载没有完成。在继续之前,如何确保下载完成?谢谢。

编辑:我有超时,所以它不会无限期地等待。我应该延长超时吗?还是有更好的方法?

public void addImage(string source, string destination)
    {
        if (isFinalized)
            return;

        try
        {
            WebRequest req = WebRequest.Create(source);
            req.Timeout = 5000;

            WebResponse resp = req.GetResponse();
            BufferedStream reader = new BufferedStream(resp.GetResponseStream());

            byte[] fileData = new byte[resp.ContentLength];
            reader.Read(fileData, 0, fileData.Length);
            zip.AddEntry(destination, fileData);
        }
        catch (Exception exp)
        {
        }
    }

1 个答案:

答案 0 :(得分:1)

在您的代码中,您需要检查已读取的字节,看看您是否已完全获取图像。

int FinalRead = reader.Read(fileData, 0, fileData.Length);
bool fImageIsOk = FinalRead == resp.ContentLength ;

另外,我强烈建议您使用BufferedStream

来扭曲using

我认为msdn have a good example上的示例代码。

你必须关注的部分就是这个。不要试图找到你的缓冲区。最后,您可以检查是否有完整的照片。您还可以检查流程IsClientConnected

上的其他部分是否仍然连接
int numBytesToRead = receivedData.Length;

while (numBytesToRead > 0)
{
    // Read may return anything from 0 to numBytesToRead.
    int n = bufStream.Read(receivedData,0, receivedData.Length);
    // The end of the file is reached.
    if (n == 0)
        break;
    bytesReceived += n;
    numBytesToRead -= n;
}