取消BackgroundWorker中的Webclient.DownloadFile

Pla*_*tor 1 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
Run Code Online (Sandbox Code Playgroud)

我想不出插入循环来检查取消挂起的方法或位置。我对线程只有一点了解,也不完全理解 AutoResetEvent。

The*_*ebo 5

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

请注意,我自己还没有测试过这一点 - 但这是我尝试的第一件事。