以下代码从URI获取Stream,并使用循环以块的形式读入 . 请注意,指定URI后面是一个在线无线电流,这意味着没有已知的大小 .
var uri = new Uri("http://*******", UriKind.Absolute);
var http = new HttpClient();
var stream = await http.GetStreamAsync(uri);
var buffer = new byte[65536];
while (true)
{
var read = await stream.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
Debug.WriteLine("Read: {0}", read);
}
现在,虽然这在.NET 4.5控制台应用程序中运行得非常好,但这个完全相同的代码在WinRT中无法正常工作 - 它将读取第一个块,并且当第二次调用ReadAsync时,它将被卡住并且永远不会继续 .
如果我将URI切换到一个文件(已知大小),一切都可以正常工作 .
有小费吗?
EDIT >请注意,此行为仅在WP8.1上发生 . 我刚刚在SO上搜索了一些,发现我的问题可能与此问题重复:WP8.1 HttpClient Stream got only 65536 bytes data如果这是真的,我会关闭我的问题
2 回答
将
HttpClient.GetAsync()
与HttpCompletionOption.ResponseHeadersRead
一起使用 . 收到 Headers 后返回,然后执行HttpResponse.Content.ReadAsInputStreamAsync()
.看起来你的while循环是无限的 . 你是如何确保它是有限的?而不是while(true)使它成为这样的东西