У меня возникла проблема с тем, как отменить эту задачу на C#. У меня нет четкого понимания обработки потоков, и я попытался использовать Googling для некоторых простых примеров кода, чтобы помочь мне, но у меня там действительно нет. Вот часть кода, над которым я работаю:Отмена задачи, которая извлекает URL-адреса асинхронно
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-адресов полностью прекращается? Кроме того, фрагмент кода, который я вставил, - это функция, которая вызывает вызовы backgroundWorker1, которые, я полагаю, могут сделать вещи немного сложнее. (Причина, почему у меня есть backgroundWorker, так что пользовательский интерфейс не блокируется во время загрузки URL-адресов.)
Если это в какой-то мере немного запутанно, вот схема того, что я пытался достичь с помощью моего код:
- У меня есть массив URL-адресов, я хотел бы загрузить каждый URL-адрес асинхронно без блокировки пользовательского интерфейса.
- Я бы хотел, чтобы пользователь остановил программу от загрузки URL-адресов, нажав кнопку, в значительной степени отменив нить.
- Когда пользователь снова нажимает кнопку, программа снова загружает URL-адреса из этого массива.
Заранее спасибо.
Просьба не включать теги в заголовок вопроса; это просто делает больше работы для тех из нас, которые заботятся о последовательности на SO. –