| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > WebClient |
| Автор: Felixx 22.8.2012, 19:24 | ||||||||
| Привет, как то странно работает веб клиент... Первые 2 файла качает нормально.. когда начинает качать следущий как тока прошол коннект, сразу же для етого файла выполняется комплит.. Прога делает примерно следущее: Скачиваем файл, как только скачали - распаковываем. Как только распаковали, удаляем архив. Впринципе самый обычный Updater файлов. Вот логи проги: 1)
2) Ещщоо хужее !!
Код такой: 1) Вызываем скачивание
2) DManager
Изза чего такое может происходить, что не так ? :( |
| Автор: Felixx 22.8.2012, 20:04 |
| Если что то вот все: http://rghost.ru/39940088 |
| Автор: diadiavova 22.8.2012, 21:36 |
| Felixx, просмотрел код поверхностно, насколько я понял, ты здесь в цикле запрашиваешь файлы асинхронно, то есть они качаются в несколько потоков. Здесь могут быть ограничения на максимальное количество потоков, как со стороны сервера, так и со стороны клиента. Ограничения со стороны клиента определяются в конфигурации приложения следующим образом http://msdn.microsoft.com/ru-ru/library/fb6y0fyc.aspx Попробуй увеличить максимальное количество подключений. |
| Автор: Felixx 22.8.2012, 22:16 |
| Не, не помогает :( |
| Автор: diadiavova 22.8.2012, 22:21 |
А что именно ты прописал? |
| Автор: Felixx 22.8.2012, 22:26 | ||||
Добавлено через 6 минут и 11 секунд Чую, где то в логике программы косяк. Ибо начинаются глюки именно со 2го файла.. если 1 файл то все норм.... а пропотоки, разве это не решит проблему?
|
| Автор: diadiavova 22.8.2012, 22:32 | ||
Попробуй внести строку
|
| Автор: Felixx 22.8.2012, 22:40 |
| Ох, и правда.. заработало! Странно, раньше я так делал ноне помогало..но я там уже много чего переделал.. Всеравно, огромное спасибо! Жаль что 100 постов ешо не набил, поставил бы + |
| Автор: diadiavova 22.8.2012, 22:46 |
Ну ты же в конфигурацию внес изменения. Не? |
| Автор: Felixx 22.8.2012, 22:49 | ||
| Дак я уже назад удалил)) Сделал просто так вот:
|
| Автор: diadiavova 22.8.2012, 22:54 |
Ну я, честно говоря, не знаю сколько там коннекшнов дается по умолчанию |
| Автор: Felixx 22.8.2012, 23:02 |
| Да я чото вообще ни понел в чем прикол того, что низя один и тот же клиент юзать несколько раз.. странная неведомая штука кака я то Добавлено через 3 минуты и 39 секунд Кстати, а не лучше ли запускать скачку в отдельном потоке через backgroundWorker ? Штоб форма и компоненты вдруг не подвисли нечайно?) |
| Автор: Felixx 22.8.2012, 23:12 |
| А, ну ясно .. |
| Автор: diadiavova 22.8.2012, 23:17 |
А как она может подвиснуть случайно? Когда вызывается асинхронный метод, скачка и так происходит в отдельном потоке. Запускать бэкграундвокер только для выполнения кода, запускающего скачку, мне это кажется лишним. |
| Автор: Felixx 22.8.2012, 23:23 |
| Ну я тоже так впринципе думал... А не подскажеш, как лучше сделать, так, чтобы общий процент выполнения посчитать? Например у меня файл (список файлов), в нем 2000 файлов. и каждый надо скачать.. тока по их количеству? просто если например один файл 1 килобайт весит а второй 1гигобайт... общий прогресс при скачивании первого станет 50% ... этож не правельно :( Без добавления в список размера каждого файла, не обойтись никак? :( |
| Автор: diadiavova 22.8.2012, 23:36 | ||
Так обработчик события DownloadProgressChanged дает ведь такую информацию. Посмотри свойства аргумента обработчика http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=RU-RU&k=k%28System.ComponentModel.ProgressChangedEventArgs.ProgressPercentage%29;k%28vs.objectbrowser%29;k%28TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5%29;k%28TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5%29&rd=true |
| Автор: Felixx 22.8.2012, 23:53 |
| дак, это то я знаю.. но ведь это только текущий файл. а мне надо общее из 2 или 3000 файлов )) я про ето) |
| Автор: diadiavova 23.8.2012, 00:02 | ||
Значит надо организовать вычисления. Можно создать словарик, в котором ключом будет адрес файла, а значением процент скачки. Из обработчика обновляй данные в этом словаре. Когда надо вычислить общий прогресс, пройдись по словарю и вычисли среднее арифметическое прогресса. Или забивай туда инфу о прогрессе полностью и вычисляй по количеству скачанный байт и общему количеству. Это, конечно, только идея реализации, а не инструкция, просто направление куда копать. |
| Автор: Felixx 23.8.2012, 00:08 |
| Угу, спасибо огромное ещо раз |