У меня возникла небольшая проблема с поиском, как отменить эту задачу в C #. У меня нет четкого понимания работы с потоками, и я попробовал Googling для нескольких простых примеров кода, чтобы выручить меня, но я действительно не получил нигде Вот фрагмент кода, над которым я работаю:
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-адреса из этого массива.
Заранее спасибо.