【问题标题】:Windows store get download progressWindows 商店获取下载进度
【发布时间】:2023-04-02 17:50:01
【问题描述】:

经过很长时间的努力,我终于得到了一个使用身份验证下载文件的代码,并在 Windows 商店应用程序中发送带有范围的标题,现在下一个级别是获取下载的进度条,所以任何了解应该用于获取下载操作的类和方法吗?

这是我的代码:

var httpClientHandler = new HttpClientHandler();
httpClientHandler.Credentials = new System.Net.NetworkCredential("", "");
var client = new HttpClient(httpClientHandler);

System.Net.Http.HttpRequestMessage request = new System.Net.Http.HttpRequestMessage(HttpMethod.Post, new Uri(""));
request.Headers.Range = new RangeHeaderValue(0,null);
HttpResponseMessage response = await client.SendAsync(request);              
Stream stream = await response.Content.ReadAsStreamAsync();
StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);
await Windows.Storage.FileIO.WriteBytesAsync(file, ReadStream(stream));

【问题讨论】:

    标签: c# download windows-store-apps windows-8.1


    【解决方案1】:

    如果您从System.Net.Http.HttpClient 切换到Windows.Web.Http.HttpClient,这项任务会更容易。

    using Windows.Web.Http;
    using Windows.Web.Http.Filters;
    
    private async void Foo(StorageFolder folder, string fileName)
    {
    
        Uri uri = new Uri("http://localhost");
        var filter = new HttpBaseProtocolFilter();
        filter.ServerCredential =
            new Windows.Security.Credentials.PasswordCredential(uri.ToString(), "foo", "bar");
        var client = new HttpClient(filter);
    
        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri);
        request.Headers.Add("Range", "bytes=0-");
    
        // Hook up progress handler.
        Progress<HttpProgress> progressCallback = new Progress<HttpProgress>(OnSendRequestProgress);
        var tokenSource = new CancellationTokenSource();
        HttpResponseMessage response = await client.SendRequestAsync(request).AsTask(tokenSource.Token, progressCallback);
    
        IInputStream inputStream = await response.Content.ReadAsInputStreamAsync();
        StorageFile file = await folder.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);
    
        // Copy from stream to stream.
        IOutputStream outputStream = await file.OpenAsync(FileAccessMode.ReadWrite);
        await RandomAccessStream.CopyAndCloseAsync(inputStream, outputStream);
    }
    
    private void OnSendRequestProgress(HttpProgress obj)
    {
        Debug.WriteLine(obj);
    }
    

    要不然看看at this other answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-30
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多