Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010

Повтор действия при исключении

07.06.2015, 21:15. Показов 2568. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Качаю файлы, столкнулся с проблемой.

Вот код

VB.NET
1
2
3
4
5
Do While 'пока в файле есть строки
 
Client.DownloadFile(path, savePath)
 
Loop
Файлов много, было такое, что проскакивали ошибки в интернет соединении и программа падала, тогда я добавил Try Catch, что бы программа не падала

VB.NET
1
2
3
4
5
6
7
8
Do While 'пока в файле есть строки
            Try
                    Client.DownloadFile(path, savePath)
         
            Catch exception As Exception
                 'msgBox("Ошибка")
            End Try
Loop
Но и тут проблема. Если интернета нет, то программа не упадет, но и скачает не все файлы, т.к. пока нет интернета программа через Do While будет продолжать идти дальше и спускаться по файлу на строку ниже.

Как сделать так, чтобы программа повторяла действие, пока не скачает файл? Вот упал интернет, пусть остановится на том файле, который не удалось скачать и пусть ждет появления интернета и только тогда Do While сдвинется на еще одну строку ниже.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.06.2015, 21:15
Ответы с готовыми решениями:

Повтор цикла при определенном условии
Как такое сделать? IF True Then Все_сначала

Повтор действия
Добрый день! Есть данный код, при нажатии на кнопку загружается и открывается файл по ссылке. Как его дописать что бы загружался и...

Графический редактор, функции отмена/повтор действия
Всем добрый вечер, при создании графического редактора возникли некоторые вопросы, прошу помочь с ними разобраться:): 1)как реализовать...

7
 Аватар для Leon37
78 / 24 / 4
Регистрация: 09.01.2015
Сообщений: 214
07.06.2015, 21:32
Дядя Корней, Можно попробовать запускать код в потоке и при возникновении ошибки( Пропал интернет), ставить поток на паузу а при появлении или исправлении ошибки возобновлять поток?
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
07.06.2015, 21:39
Дядя Корней, если WebClient используешь, то у него есть ряд событий, позволяющих контролировать процесс загрузки. Ну собственно веди журнал загрузки, если файл загружен как надо - ставь метку, если нет - потом вернешься к его закачке.

Добавлено через 2 минуты
Как вариант - очередь. Изъял адрес (или что там у тебя) из очереди, качаешь. Сорвалась загрузка - вернул адрес в очередь.
1
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 93
07.06.2015, 23:31
Лучший ответ Сообщение было отмечено Дядя Корней как решение

Решение

ну... может вот так?
VB.NET
1
2
3
4
5
6
7
dim timest =5 'пауза между попытками закачек в секундах
on error goto repeat
do while '....
repeat:
Client.DownloadFile(path, savePath)
System.Threading.Thread.Sleep(1000*timest)
Loop
а если нужно чтобы только на определенные ошибки оно старалось перекачать то тогда try...catch...end try и в блоке catch по коду ошибки if ex='нужный код' then goto repeat

Добавлено через 31 минуту
хмм... или если без вот этих перелетов

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
dim Exept as boolean
 
do while 'пока в файле есть строки
     Exept =false ' ошибки нет
     do while exept=true 'пока будет ошибка крутим-вертим тут
          try
               Client.DownloadFile(path, savePath)
               exept=false 'сбрасываем ошибку
          catch
               exept=true 'ловим ошибку. точно так же можно ловить только ошибку, когда нет интернета. а если например файл не существует или еще что-то то не ловить
          end try
     loop
Loop
1
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
07.06.2015, 23:34  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Дядя Корней, если WebClient используешь, то у него есть ряд событий, позволяющих контролировать процесс загрузки. Ну собственно веди журнал загрузки, если файл загружен как надо - ставь метку, если нет - потом вернешься к его закачке.
Нашел на MSDN отличное событие, DownloadDataCompleted называется. Вроде как это именно то, что мне нужно, вот пример с того же MSDN:


VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'  Sample call : DownLoadDataInBackground ("http:' www.contoso.com/GameScores.html")
        Public Shared Sub DownloadDataInBackground(ByVal address As String)
 
            Dim waiter As System.Threading.AutoResetEvent = New System.Threading.AutoResetEvent(False)
            Dim client As WebClient = New WebClient()
 
            '  Specify that the DownloadDataCallback method gets called
            '  when the download completes.
            AddHandler client.DownloadDataCompleted, AddressOf DownloadDataCallback
                        Dim uri as Uri = New Uri(address)
            client.DownloadDataAsync(uri, waiter)
 
            '  Block the main application thread. Real applications
            '  can perform other tasks while waiting for the download to complete.
            waiter.WaitOne()
        End Sub
Всё в общем-то понятно, я только не понял вот этой строки:
VB.NET
1
AddHandler client.DownloadDataCompleted, AddressOf DownloadDataCallback
Что такое AddressOf DownloadDataCallback что я должен сюда поставить?
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
07.06.2015, 23:39
Цитата Сообщение от Дядя Корней Посмотреть сообщение
Что такое AddressOf DownloadDataCallback что я должен сюда поставить?
Обработчик. Это подписка на событие. Можно подписываться при помощи WithEvents и Handles, а если надо иметь возможность подписаться или отписаться динамически, то соответственно AddHandler и RemoveHandler. А после AddressOf имя метода-обработчика. Естественно он должен иметь подходящую сигнатуру.
1
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
07.06.2015, 23:55  [ТС]
LEonardo_, к черту MSDN, заберу пожалуй Ваш вариант, он прост как велосипед и так же понятен

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
dim Exept as boolean
 
do while 'пока в файле есть строки
     Exept = false ' ошибки нет
     do while exept=true 'пока будет ошибка крутим-вертим тут
          try
               Client.DownloadFile(path, savePath)
               exept=false 'сбрасываем ошибку
          catch
               exept=true 'ловим ошибку. точно так же можно ловить только ошибку, когда нет интернета. а если например файл не существует или еще что-то то не ловить
          end try
     loop
Loop
Только у Вас с True и False немного напутано.
VB.NET
1
2
Exept = false ' ошибки нет
     do while exept=true 'пока будет ошибка крутим-вертим тут
Вот так программа никогда не войдет в do while, т.к. перед этим стоит False, а для вхождения нужно True
0
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 93
08.06.2015, 13:22
А... Да, правда, ошибка... Просто я прямо тут на форуме писал вообщем-то без компиляции... Вот и просмотрел...
Извините, больше так не буду
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2015, 13:22
Помогаю со студенческими работами здесь

Как сделать повтор действия после нажатия любой клавиши
Задача : Разработать программу, в которой описать переменные для создания соответствующей динамической структуры. Рекомендуется в...

Макрос выделения диапазона ячеек-объединение их в одну-переход на след.строку-повтор пред.действия
Добрый день. Помогите плиз решить задачу. Я с VBA столкнулся впервые 1) в строке необходимо объединить диапазон ячеек (в каждой...

Выводить сообщение при исключении
Здравствуйте, написал код, т.с. методом научного тыка, ну не понимаю я java , но лабораторную все равно нужно как-то делать, так вот, к...

Не показывать стек при исключении
Хочется отобразить только текст исключения. Как для MVC так и для WebApi. Собственно, как ?

продолжить работу, при не обрабатываемом исключении
Моё приложение использует объект сборки к исходникам которой доступа нет. Данный объект порождает потоки, в которых иногда случается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru