c# - 在 BackgroundWorker 中取消 Webclient.DownloadFile

标签 c# background webclient

背景信息:我有一个程序通过 url 列表运行;每个 URL 一次下载一个,但在后台线程中运行以保持 UI 响应能力。为了报告进度,我使用了 DownloadFileAsync 方法。 我的问题是我希望能够有一个可以立即结束下载的取消按钮。我的代码类似于

AutoResetEvent autoMobile = new AutoResetEvent(false);
WebClient dclient = new WebClient();

//setup event handlers... for progress, etc...

dclient.DownloadFileAsync(new Uri(egg.DownloadURL), egg.LocalFilePath);
autoMobile.WaitOne();

//end of DoWork

我想不出一种方法或地方来插入一个循环来检查取消挂起。对线程的了解不多,对AutoResetEvent也不是很了解。

最佳答案

如果您使用的是 System.Net.WebClient,它包含一个 CancelAsync() 方法,它应该为您完成。您所需要的只是对要取消的特定 WebClient 的引用,以便您的按钮的单击事件可以调用该方法。

请注意,我自己还没有对此进行测试 - 但这是我尝试的第一件事。

关于c# - 在 BackgroundWorker 中取消 Webclient.DownloadFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6522244/

相关文章:

c# - 在 While 循环的每次迭代期间读取 SQL Server Stored Proc 输出的表

c# - 如何循环类的字段名称

ios - 仅当应用程序处于事件状态时,如何在 performFetchWithCompletionHandler 中执行代码?

c# - .NET:向 WebClient 的 UploadStringCompletedEventHandler 提交用户定义标记的最佳方式是什么

c# - 如何知道异步函数何时完成 C#

c# - 产品搜索算法最佳实践

c# - 如何使用 AngleSharp 查找和替换链接上的 href 值?

python - PIL 从图像中删除背景图像

background - SVG 背景图案使用全局而非局部坐标系

c# - 如何以阻塞/同步方式下载文件?