中止 WebClient.DownloadFileAsync 操作

2024-02-17

安全取消 DownloadFileAsync 操作的最佳方法是什么?

我有一个线程(后台工作人员),它启动下载并管理它的其他方面,当我看到该线程有时我结束CancellationPending == true.开始下载后,线程将静止并旋转,直到下载完成或线程被取消。

如果线程被取消,我想取消下载。有这样做的标准习惯用法吗?我试过了CancelAsync,但我从中得到一个 WebException(已中止)。我不确定这是一种干净的取消方式。

Thanks.

编辑:第一个例外是对象在内部流(调用堆栈)上处置一个:

System.dll!System.Net.Sockets.NetworkStream.EndRead(System.IAsyncResult asyncResult) System.dll!System.Net.PooledStream.EndRead(System.IAsyncResult asyncResult)


我不确定为什么调用 CancelAsync 会出现异常。

我使用 WebClient 来处理当前项目中的并行下载,并在调用 CancelAsync 事件时DownloadFileCompleted由 WebClient 引发,其中属性Cancelled是真的。我的事件处理程序如下所示:

private void OnDownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    if (e.Cancelled)
    {
        this.CleanUp(); // Method that disposes the client and unhooks events
        return;
    }

    if (e.Error != null) // We have an error! Retry a few times, then abort.
    {
        if (this.retryCount < RetryMaxCount)
        {
            this.retryCount++;
            this.CleanUp();
            this.Start();
        }

        // The re-tries have failed, abort download.
        this.CleanUp();
        this.errorMessage = "Downloading " + this.fileName + " failed.";
        this.RaisePropertyChanged("ErrorMessage");
        return;
     }

     this.message = "Downloading " + this.fileName + " complete!";
     this.RaisePropertyChanged("Message");

     this.progress = 0;

     this.CleanUp();
     this.RaisePropertyChanged("DownloadCompleted");
}

而取消的方法很简单:

/// <summary>
/// If downloading, cancels a download in progress.
/// </summary>
public virtual void Cancel()
{
    if (this.client != null)
    {
        this.client.CancelAsync();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中止 WebClient.DownloadFileAsync 操作 的相关文章

  • 简单的C问题

    作为我正在进行的项目的一部分 我必须开始学习 C 我已经开始解决其中的 欧拉 问题 并且遇到了麻烦 我必须找到 1000 以下的所有 3 或 5 的倍数之和 有人可以帮助我吗 谢谢 include
  • ASP.NET 会员电子邮件验证

    尝试基于 C 创建电子邮件验证本文 https web archive org web 20211020153319 https www 4guysfromrolla com articles 062508 1 aspx 我创建了一个 ja
  • 将列表数组中的值绑定到列表框

    任何机构都可以给出一个简短的示例 用于将列表数组中的值绑定到 c net 中的列表框 这取决于您的列表数组的情况 让我们从一个简单的示例开始 List
  • 在 C++ 中,std::string::push_back() 的摊余复杂度是 O(1) 吗?

    我知道标准指定它适用于向量 但是字符串呢 是的 它是摊销常数时间 请参见第 716 页的表 101本文件的 http www open std org jtc1 sc22 wg21 docs papers 2012 n3485 pdf 表
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • MVC 中的 Blazor:组件被渲染,但 @onclick 不起作用。连接问题

    我正在尝试在 net core 3 MVC 项目中使用 Blazor 我使用了一些教程来做到这一点 例如https fizzylogic nl 2019 08 18 integrating blazor in an existing asp
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 为什么我在这段代码中不断得到两个相同的随机值? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我的随机数生成器在 C 中不是随机的 https stackoverflow com questions 932520 why does it appear that my random num
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • 使用 C# 和 .NET Core 在 AWS Cognito 用户池中进行用户管理

    如何使用 C 和 NET Core 3 x 管理 AWS Cognito 用户池中的用户 在文档中找不到有关它的任何内容 Attilio Gelosa 的原创文章 我写这篇文章是希望对其他人有帮助 我必须阅读一页又一页的文档 并从 AWS
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • 在标准 C 中将 int 转换为 string

    我是 C 新手 我正在寻找一个可以调用函数进行转换的示例int串起来 我发现itoa但这不是标准 C 的一部分 我还发现sprintf str d aInt 但问题是我不知道所需的 str 的大小 因此 我如何传递输出字符串的正确大小 有多
  • 使texture2D在运行时/脚本Unity3D中可读[重复]

    这个问题在这里已经有答案了 我有一个插件 可以让我访问 Android 手机图库中的图片 这给了我一个Texture2D类型的纹理 然后我想使用 GetPixels 函数对其进行编辑 但默认情况下它未设置为可读 如何使纹理可读 以便我可以在
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用

随机推荐

  • clang-format:类声明结束和命名空间关闭之间的空行

    我使用 clang format 来格式化我们的 C 代码 我想在类声明和周围命名空间的右大括号之间有一个空行 如下所示 namespace Foo class Bar 但 clang format 将我的代码更改为 namespace F
  • 如何检查文本框是否为空

    在一个网站上我发现了TryParse方法 如何检查C 中是否有空文本框 但我不知道如何使用它 int outputValue 0 bool isNumber false isNumber int TryParse textBox1 Text
  • 安装 Forge Installer - 自动启动安装程序

    我正在使用 InstallForge 创建安装程序 我希望创建一个安装程序 该安装程序将在启动时自动启动已安装的程序 我认为安装程序可以在启动文件夹中创建快捷方式 并且该程序应该在启动时加载 我用谷歌搜索并找到了解决方案 但当我尝试时却不起
  • jboss as 7 - 在同一Linux服务器中运行多个实例 - 独立与域

    我下载了 jboss tar 文件 复制到我的测试服务器中 解压并将其安装在 HOME jboss 现在 我需要在一台服务器上同时运行三个实例 开发 QA UAT Domain模式适合这种情况吗 我的结论是事实并非如此 域模式是跨多个服务器
  • git pull --rebase 通过保留本地更改来解决冲突

    我在当地分支机构重新获得了硕士学位 与此同时 有人在远程对该分支进行了更改 我在做git pull rebase 我不明白 git 在命名时如何解释这个命令current and incoming 也ours and theirs 我应该选
  • 使用 terraform aws_acm_certificate_validation 时缺少 DNS 验证记录

    在尝试创建 AWS Route53 资源和 AWS Certificate Manager 资源时 我一整天都陷入 Terraform 错误 这 2 位是一个更广泛的项目的一部分 通过其静态服务功能托管在 s3 中的网站 具体来说 当 CN
  • iphone中出现键盘时如何显示标签栏

    大家好 我正在一个基于选项卡栏的应用程序中工作 我需要显示键盘 键盘通常出现 但我希望应该显示我的选项卡栏 并且在选项卡栏上方只有键盘应该显示如何完成此操作 谢谢你们 您可以将选项卡栏与键盘一起移动 如下所示 IBAction textBo
  • 是否可以比使用 hashmap 更快地将字符串映射到 int?

    我知道我不应该优化程序的每个点 所以请考虑这个问题是 学术 的 我最多有 100 个字符串和每个字符串的整数 如下所示 MSFT 1 DELL 2 HP 4 ABC 58 该集合是预先初始化的 这意味着一旦创建它就永远不会改变 设置初始化后
  • “berks update ”到底是做什么的?

    根据 berks help update 该命令应该 更新 Berksfile 中指定的说明书 和依赖项 是的 这就是它所说的 但这到底是什么意思呢 这与 Berksfile 中不同类型的 食谱 规范有何不同 更新命令将尝试查找每个说明书的
  • WordPress:自动删除x天前的帖子?

    很长一段时间以来 我一直在寻找一个可以删除超过一定 年龄 例如 30 天 的帖子的插件 做这个的最好方式是什么 下面的 SQL 可以找到所有已经存在 30 天或更长时间的帖子 SELECT FROM wp posts WHERE post
  • 如何在 Emacs 中找到建议函数的默认提示?

    当我查看文档时beginning of defun 有一个注释 This function is advised Around advice senator Move backward to the beginning of a defun
  • 在 unix (nginx) 上托管时.NET Core 中的 TimeZoneInfo

    例如 当我尝试执行以下操作时 TimeZoneInfo FindSystemTimeZoneById Central European Standard Time 我收到错误 即TimeZone在本地计算机上不可用 当我在本地运行它时 它可
  • 在 Droid X 上裁剪图片将生成的图像设置为壁纸

    当我尝试裁剪用户从其图库中选择的图像时 我的程序遇到了问题 到目前为止 该问题仅在 Droid X 上运行时出现 因为在原始 moto Droid 上运行正常 基本上 该问题是在运行裁剪意图时发生的 一旦用户裁剪照片并单击保存按钮 它就会用
  • 等待 Cypress 中未覆盖的元素

    我收到错误 imed out retrying cy click failed because this element a class icon href home a is being covered by another elemen
  • 当响应为比例时的逻辑回归(使用 JAGS)

    我试图在 JAGS 中拟合逻辑回归模型 但我的数据格式为 success y attempts n 而不是二进制变量 在 R 中 可以通过使用 glm y n 和 权重 参数来将模型拟合到此类数据 但我不确定如何将其拟合到 JAGS 中 这
  • android.support.test.espresso.NoActivityResumedException:恢复阶段没有活动

    我正在尝试为我的活动编写测试用例 我有多项活动 其中一项活动没有问题 但当我尝试在其他活动上运行测试时出现以下错误ActivityTest类 android support test espresso NoActivityResumedEx
  • Docker 服务启动失败

    重启虚拟机后命令docker 图片命令显示错误 Cannot connect to the Docker daemon at unix var run docker sock Is the docker daemon running 看来d
  • 在 SQL Server 2005 中对非常大的结果集进行分页的有效方法是什么?

    EDIT 我仍在等待更多答案 谢谢 在 SQL 2000 时代 我曾经使用临时表方法 使用新的标识列和主键创建临时表 然后选择 A 和 B 之间的标识列 When SQL 2005我来了之后发现了Row Number 从那时起我就一直在使用
  • 如何将API网关与内部ALB集成

    根据https docs aws amazon com apigateway latest developerguide http api develop integrations private html https docs aws a
  • 中止 WebClient.DownloadFileAsync 操作

    安全取消 DownloadFileAsync 操作的最佳方法是什么 我有一个线程 后台工作人员 它启动下载并管理它的其他方面 当我看到该线程有时我结束CancellationPending true 开始下载后 线程将静止并旋转 直到下载完