Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows应用商店获取下载进度_C#_Download_Windows Store Apps_Windows 8.1 - Fatal编程技术网

C# Windows应用商店获取下载进度

C# Windows应用商店获取下载进度,c#,download,windows-store-apps,windows-8.1,C#,Download,Windows Store Apps,Windows 8.1,经过长时间的努力,我终于获得了一个使用身份验证下载文件的代码,并在windows应用商店应用程序中发送了一个包含范围的头文件,现在下一个级别是获取下载进度条,那么您知道应该使用哪些类和方法来获取下载操作吗 这是我的代码: var httpClientHandler = new HttpClientHandler(); httpClientHandler.Credentials = new System.Net.NetworkCredential("", ""); var client = new

经过长时间的努力,我终于获得了一个使用身份验证下载文件的代码,并在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));

如果从
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);
}
使用Windows.Web.Http;
使用Windows.Web.Http.Filters;
专用异步void Foo(StorageFolder文件夹,字符串文件名)
{
Uri=新的Uri(“http://localhost");
var filter=新的HttpBaseProtocolFilter();
filter.ServerCredential=
新的Windows.Security.Credentials.PasswordCredential(uri.ToString(),“foo”,“bar”);
var client=新的HttpClient(过滤器);
HttpRequestMessage请求=新的HttpRequestMessage(HttpMethod.Post,uri);
添加(“范围”,“字节=0-”;
//连接进度处理程序。
Progress progressCallback=新进度(OnSendRequestProgress);
var tokenSource=new CancellationTokenSource();
HttpResponseMessage response=wait client.SendRequestAsync(request).AsTask(tokenSource.Token,progressCallback);
IIInputStream inputStream=等待响应.Content.ReadAsInputStreamAsync();
StorageFile file=wait folder.CreateFileAsync(文件名,CreationCollisionOption.GenerateUniqueName);
//从一个流复制到另一个流。
IOutputStream outputStream=await file.OpenAsync(FileAccessMode.ReadWrite);
等待RandomAccessStream.CopyAndCloseAsync(inputStream,outputStream);
}
私有void OnSendRequestProgress(HttpProgress obj)
{
Debug.WriteLine(obj);
}
否则,请看一看