在BackgroundWorker中取消Webclient.DownloadFile

时间:2011-06-29 14:22:09

标签: 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。

1 个答案:

答案 0 :(得分:4)

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

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