【发布时间】:2012-01-31 04:34:07
【问题描述】:
我在找出如何在 C# 中取消此任务时遇到了一些问题。我对处理线程并没有很深的理解,我尝试在谷歌上搜索一些简单的代码示例来帮助我,但我真的无处可去。这是我正在处理的代码:
var tasks = urls.Select(url => Task.Factory.StartNew(
state =>
{
using (var client = new WebClient())
{
lock (this)
{
// code to download stuff from URL
}
}
}, url)).ToArray();
try
{
Task.WaitAll(tasks);
}
catch (Exception e)
{
textBox2.AppendText("Error: " + e.ToString());
}
其中“urls”是一个 URL 数组。有没有一种简单的方法可以在我单击程序中的按钮时完全停止 URL 的下载?此外,我粘贴的代码 sn-p 位于 backgroundWorker1 调用的函数中,我想这可能会使事情变得更复杂一些。 (我有一个 backgroundWorker 的原因是 UI 在下载 URL 时不会锁定。)
如果这有点令人困惑,这里是我试图用我的代码实现的大纲:
- 我有一个 URL 数组,我想异步下载每个 URL 而不会锁定 UI。
- 我希望用户通过单击按钮来停止程序下载 URL,这几乎是取消线程。
- 当用户再次单击该按钮时,程序会从该数组中重新下载所有 URL。
提前致谢。
【问题讨论】:
-
请不要在问题标题中包含标签;它只是为我们这些关心 SO 一致性的人做更多的工作。
标签: c# asynchronous multitasking task