Проблема совмещения WebClient и потоков в C#

программирование C# net потоки

Учу C#

Надо:
1. загрузить веб-страницу
2. вытащить из html-кода адреса всех изображений
3. загрузить все изображения на локальный компьютер, запустив загрузку каждого в отдельном потоке

Проблемы с 3 пунктом, изображения не грузятся, иногда (не всегда) вылезает сообщение об ошибке COM враппера.

Код:

static void Main()
{

... (тут выполнение первых двух пунктов)


foreach (HtmlElement cimg in imgs)
{
System.Random rndm = new Random();
int randn = rndm.Next(0, 1024);
Thread thr = new Thread(delegate() { loadimg(cimg.GetAttribute("src"), string.Concat("C:\\csh\\", randn.ToString(), ".gif")); });
thr.Name = randn.ToString();
thr.Start();
}

...

}



static void loadimg(string img_url, string save_path)
{
Console.WriteLine("Thread {1}: Downloading {0}...", img_url, Thread.CurrentThread.Name.ToString());
WebClient wcl = new WebClient();
Uri url = new Uri(img_url);
wcl.DownloadFileAsync(url, save_path);
wcl.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wcl_DownloadFileCompleted);
}


static void wcl_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Console.WriteLine(" 100% ");
}
Ответы:
Многопоточность то вы добавили, а о сихронизации потоков кто за вас думать должен?
Как выглядет этот код ошибки? Что там написано?
Может быть из-за того что превышается лимит соединений получаются ошибки?


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.