 <p>I tested your code, for the first method you took, it works fine by me, I just added a <code>Dispose()</code> in it. And for the second method, I think it may be the problem that you didn't get the <code>ContentLength</code> of your var <code>response</code>.</p> <p>Here is my code, and the commented part of the code is the first method, I took a <code>Button Click</code> event to handle this:</p> <pre><code> public async void HTTP(object sender, RoutedEventArgs e) { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("URL"); HttpWebResponse response = (HttpWebResponse)await httpWebRequest.GetResponseAsync(); Stream resStream = response.GetResponseStream(); StringBuilder sb = new StringBuilder(); StreamReader read = new StreamReader(resStream); string tmpString = null; int count = (int)response.ContentLength; int offset = 0; Byte[] buf = new byte[count]; do { int n = resStream.Read(buf, offset, count); if (n == 0) break; count -= n; offset += n; tmpString = Encoding.ASCII.GetString(buf, 0, buf.Length); sb.Append(tmpString); } while (count &gt; 0); text.Text = tmpString; read.Dispose(); //using (StreamReader read = new StreamReader(resStream)) //{ // var result = await read.ReadToEndAsync(); // text.Text = result; // read.Dispose(); //} response.Dispose(); } </code></pre> <p>I've tested it, and it works fine.</p>