2011-12-13 26 views
5

私はResponeStreamからバイトを読み込もうとしていますが、どのようにデータを待つことができますか?WebRequest GetResponseStream読み込みバイト

GetResponseStreamの後にブレークポイントを設定して数秒待っても問題ありません。 StreamReader.ReadToEnd()を使用しても正常に動作しますが、自分でバイトを読み取る必要があります。

byte[] response = null; 

int left = 0; 
int steps = 0; 
int pos = 0; 

int bytelength = 1024; 

OnReceiveStart(); 

using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) { 
    using (Stream sr = webResponse.GetResponseStream()) { 

     response = new byte[(int)webResponse.ContentLength]; 

     left = (int)webResponse.ContentLength % bytelength; 
     steps = (int)webResponse.ContentLength/bytelength; 
     pos = 0; 

     for (int i = 0; i < steps; i++) { 
      sr.Read(response, pos, bytelength); 
      pos += bytelength; 
      OnReceiveProgress((int)webResponse.ContentLength, pos); 
     } 

     if (left != 0) { 
      sr.Read(response, pos, left); 
     } 

     sr.Close(); 
    } 
    webResponse.Close(); 
} 

OnReceiveProgress(1, 1); 

OnReceiveFinished(); 
+0

あなたは正確な問題は何ですか?ところで、 'Read'は実際に読み込まれたバイト数を返します。読み込んだバイト数として 'bytelength'の代わりにそれを使用してください。 –

答えて

6

だけのステップのあなたの同数にそれを壊さない - 代わりに、ちょうどあなたが終わっまでループで読み続け:あなたはリターンを使用する必要があります

while (pos < response.Length) 
{ 
    int bytesRead = sr.Read(response, pos, response.Length - pos); 
    if (bytesRead == 0) 
    { 
     // End of data and we didn't finish reading. Oops. 
     throw new IOException("Premature end of data"); 
    } 
    pos += bytesRead; 
    OnReceiveProgress(response.Length, pos); 
} 

注意をStream.Readの値 - とすると、あなたが求めているものすべてが読み込まれます。

関連する問題