簡體   English   中英

為什么 Stream.CanRead 在 HttpWebResponse object 上第二次調用 GetResponseStream() 時返回 false

[英]Why does Stream.CanRead return false when calling GetResponseStream() second time on HttpWebResponse object

在下面的示例代碼中, streamSupportsReading為 false。

private void SomeFunction()
{
    HttpWebResponse responseObj = GetFile();
    bool streamSupportsReading = responseObj.GetResponseStream().CanRead;
}

private HttpWebResponse GetFile()
{
    var request = (HttpWebRequest)HttpWebRequest.Create("URL");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    using (var stream = response.GetResponseStream())
    {
        using (var bytes = new MemoryStream())
        {
            var buffer = new byte[256];
            while (bytes.Length < response.ContentLength)
            {
                var read = stream.Read(buffer, 0, buffer.Length);
                //code to calculate download percentage
            }
        }
    }
    return response;
}

這是因為您將response.GetResponseStream()放在using塊中,因此它在GetFile()返回之前被處置,使其無法使用。

如果您不處理它,那么CanRead仍然是正確的:

private HttpWebResponse GetFile()
{
    var request = (HttpWebRequest)HttpWebRequest.Create("URL");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    var stream = response.GetResponseStream();
    
    using (var bytes = new MemoryStream())
    {
        var buffer = new byte[256];
        while (bytes.Length < response.ContentLength)
        {
            var read = stream.Read(buffer, 0, buffer.Length);
            //code to calculate download percentage
        }
    }
    return response;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM