- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一个库,目的是在桌面(.Net 4.0 及更高版本)、手机(WP 7.5 及更高版本)和 Windows 应用商店(Windows 8 及更高版本)应用程序中使用它。
该库能够使用 Portable HttpClient 库从 Internet 下载文件,并报告下载进度。
我在这里和互联网的其他地方搜索有关如何实现进度报告的文档和代码示例/指南,但这种搜索让我一无所获。
有没有人有文章、文档、指南、代码示例或任何帮助我实现这一目标的东西?
最佳答案
我写了下面的代码来实现进度报告。该代码支持我想要的所有平台;但是,您需要引用以下 NuGet 包:
代码如下:
public async Task DownloadFileAsync(string url, IProgress<double> progress, CancellationToken token)
{
var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, token);
if (!response.IsSuccessStatusCode)
{
throw new Exception(string.Format("The request returned with HTTP status code {0}", response.StatusCode));
}
var total = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L;
var canReportProgress = total != -1 && progress != null;
using (var stream = await response.Content.ReadAsStreamAsync())
{
var totalRead = 0L;
var buffer = new byte[4096];
var isMoreToRead = true;
do
{
token.ThrowIfCancellationRequested();
var read = await stream.ReadAsync(buffer, 0, buffer.Length, token);
if (read == 0)
{
isMoreToRead = false;
}
else
{
var data = new byte[read];
buffer.ToList().CopyTo(0, data, 0, read);
// TODO: put here the code to write the file to disk
totalRead += read;
if (canReportProgress)
{
progress.Report((totalRead * 1d) / (total * 1d) * 100);
}
}
} while (isMoreToRead);
}
}
使用起来很简单:
var progress = new Microsoft.Progress<double>();
progress.ProgressChanged += (sender, value) => System.Console.Write("\r%{0:N0}", value);
var cancellationToken = new CancellationTokenSource();
await DownloadFileAsync("http://www.dotpdn.com/files/Paint.NET.3.5.11.Install.zip", progress, cancellationToken.Token);
关于c# - 如何为 Portable HttpClient 实现进度报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21169573/
我最近下载了 Eclipse Portable 以随时随地进行 Java 编程。我还下载了 Java Portable。 如何将 Java Portable 与 Eclipse Portable 集成
我想包括一个可移植的类库,如下图所示: 但是,我收到以下错误: no exports were found that match the constraint contractname microso
我无法理解 Visual Studio 2015 中所有这些不同类库模板之间的区别。谁能解释或提供文档?我试过寻找但没有成功。 最佳答案 Portable 无需安装即可运行和引用 类库是 Window
我有 .net 核心测试项目。当我在 visual studio 中构建它或使用 TestManager 时,它构建时没有问题。但是,当我在包管理器控制台上执行以下命令时,出现错误: dotnet 测
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
如何编写可移植的初始化脚本 Upstart (Ubuntu) 系统 可选的init.d 其他平台(Windows、Android、OS-X)在我的上下文中并不重要。 最佳答案 两者都是systemd和
如果有人在优化代码、实现的清晰度、效率和可移植性方面证明他们的设计权衡是合理的,该如何选择? 这个问题的一个相关示例可能是大文件处理,其中“大文件”是“相当几 GB”的问题,可以使用随机访问方法进行简
aarch64 上的用户程序是否可以检测 crc32 指令是否可用?我找到了 references to kernel support对于这种检测,意味着包含有关哪些指令将在用户模式下工作的信息的寄存
当我在 hexeditor 中查看 pe 文件时,值被反向存储在其中,但为什么? 例如: pe文件头结构中第2条记录是指Number Of Section 那是值(value)是 0300 但实际值为
我知道这个问题可能听起来很奇怪,因为 GLib 是一个可移植性库,但它的可移植性如何?举一个例子:GLib(包括GObject)是在微 Controller 上运行还是依赖于某种操作系统? 我可以在何
我想在OllyDbg中分析一个文件,但是该文件中的“入口点地址”是0x0000。因此它将运行 MZ 签名作为 ASM 代码的开始部分。 大多数调试器也无法直接调试它。 如何找到修改 header 的原
我想在OllyDbg中分析一个文件,但是该文件中的“入口点地址”是0x0000。因此它将运行 MZ 签名作为 ASM 代码的开始部分。 大多数调试器也无法直接调试它。 如何找到修改 header 的原
问题 如果我在 windows 上使用 clozure cl 在普通 lisp 中制作 2d 游戏(使用:lispbuilder-sdl、quicklisp、cffi),我以后能否轻松地将其移植到其他
谁能解释一下IMAGE_THUNK_DATA的结构? 我只知道它有4个元素,但我想要这些元素的解释。 最佳答案 IMAGE_THUNK_DATA 的定义如下: typedef struct _IMAG
我刚刚使用 objdump -x ... 来检查 PE 文件的部分。 大约有 90,000 行 reloc 条目: reloc 92 offset bc0 [524bc0] HIGHLOW re
我只是想使用它,这是个好东西,但我不确定它是否受到所有主要浏览器的支持。 最佳答案 I am not sure if it's supported by all major browsers. 是的。
我正在阅读 java persistence specification version 2.1 在第 25 页中有最后一段: 实体子类可以覆盖属性访问器方法。但是,可移植应用程序不得覆盖适用于持久字
我在一个解决方案中有两个项目。核心和机器人。在 Droid 项目中,我有一个方法需要在异步方法 IN CORE 完成其任务时调用。我在 Core 中的代码是: public async
我最近不得不从一位老同事那里接手一个项目;该项目是用 JAVA 编写的,使用 Java Web-Start 并使用轻型 Java 库 (org.apache.catalina.startup.Tomc
我有一个简单的 HTML 页面,它包含指向图片和其他 HTML 页面的链接。我把网页放在内存USB上。当我将内存 USB 插入另一台 PC 时,我需要更改其在文件中的路径。我怎么能自动做到这一点? 谢
我是一名优秀的程序员,十分优秀!