Всем привет. Начал тут изучать потоки и что-то не пойму, почему они у меня работают не так,как надо. Вот мой код: http://pastebin.com/c1xh27wz Потоки создаются, но работают они как-то странно. Есть задача в цикле, создается 5 потоков, и пока все 5 потоков не пройдут первый шаг, первый поток не перейдёт на второй. А надо, чтобы первый поток после завершения первого шага переходил на второй и тп. Буду рад помощи как кодом,так и объяснениями.
Ну вообще есть такое как your_threa.Join();, которое заставляет подождать пока не исполниться поток. То есть если в потоке 10 заданий, то в вашем случае при заходе в цикл будет создаваться поток, после чего если добавить вышестоящее, то он дальше дело не пойдет пока он не выполнит все свои 10 операций. Но с другой стороны вы используете Invoke и тут могут возникнут траблы, так как Invoke отправить запрос на UI и будет ждать ответ - занавес. (поробуйте в цикле последней строчкой напистаь your_thread.Join() и увидите, что все повиснет). Но такое возникнет, только в том случае, если вам обязательно понадобиться обновлять GUI. Если нет - убирай Invoke и будет вам счастье. Вот ТУТ подобная проблематика уже поднималась, по поводу Invoke и Join(). Советую прочитать от корки до корки, в конце описано решение. А вообще если нужно обновлять GUI рекомендую пользоваться BackGroundWorker. Улачи в решении. P.S. На шарпе уже год как не езжу, брал из головы, возможно что то напутал.Хотя не должен.
Есть такая проблема, делаю запросы на сервер, сперва главным потоком получаю куки и сохраняю их CookieContainer cc = new CookieContainer(); и каждый поток при создании запроса обращается к ним. Если делать запрос с куками, то потоки намного медленнее работают. Почему так?
Вы описываете проблему весьма абстрактно - просто обращене к контейнеру с печеньками никак не будет тормозить ваши потоки. Другое дело реализация запросов. Так что код в студию.
Может при запросе с печенками сервер начинает тупить, увеличивается таймаут ожидания со всеми вытекающими. Также возможно криво сделана синхронизация при обращении к общем плюшкам, к тому же, если не делаете синхронизации доступа к CookieContainer, то CookieContainer не Thread Safe.
Быть может трай-кетч выбивает ошибку, и снова и снова пытается отправить запрос? трай-кетч то в while, и никаких условий для выхода из него нет. UPD: пересмотрел код еще раз. выход из while вообще не происходит, если я правильно понял. Надо добавить условие для выхода из цикла.