win8 metro HttpClient下載文件-帶進度條

HttpClient 直接下載文件,如果文件比較大,沒有進度顯示會很不友好,

所有在下載的時候希望下載一部分就顯示一下進度。

代碼的重點是

HttpCompletionOption.ResponseHeadersRead
以及
ReadAsStreamAsync

對於dispose,也可以用using。

var saveFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename,
                        CreationCollisionOption.ReplaceExisting);
                    var fs = await saveFile.OpenAsync(FileAccessMode.ReadWrite);
                    HttpClientHandler handler = new HttpClientHandler();
                    handler.ClientCertificateOptions = ClientCertificateOption.Automatic;
                    HttpClient hc = new HttpClient(handler);
                    HttpResponseMessage response = await hc.GetAsync(DownUrl, HttpCompletionOption.ResponseHeadersRead);
                    Stream stream = await response.Content.ReadAsStreamAsync();
                    IInputStream inputStream = stream.AsInputStream();
                    ulong totalBytesRead = 0;
                    while (true)
                    {
                        // Read from the web.
                        IBuffer buffer = new Buffer(1024);
                        buffer = await inputStream.ReadAsync(
                            buffer,
                            buffer.Capacity,
                            InputStreamOptions.None);

                        if (buffer.Length == 0)
                        {
                            // 完成
                            break;
                        }

                        // 進度
                        totalBytesRead += buffer.Length;
                        System.Diagnostics.Debug.WriteLine("Bytes read: {0}", totalBytesRead);

                        // 寫文件.
                        await fs.WriteAsync(buffer);
                    }
                    inputStream.Dispose();
                    fs.Dispose();


發佈了110 篇原創文章 · 獲贊 79 · 訪問量 84萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章