Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Дядя Корней
342 / 281 / 53
Регистрация: 14.08.2014
Сообщений: 967
1

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

07.06.2015, 21:15. Просмотров 1107. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2015, 21:15
Ответы с готовыми решениями:

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

Последовательные действия при нажатии на button
Здравствуйте! Такой вопрос, как осуществить последовательные действия при...

Действия при открытии определенного URL
Всем доброе время суток! интересует такой вопрос: Действия при открытии...

Выполнение действия при запуске программы
Public Class Form1 Private Sub Button1_Click(ByVal sender As...

Автоповтор действия при нажатии на свой контрол
Доброго времени суток. Создаю свой контрол. Как сделать, чтобы при нажатии (и...

7
Leon37
78 / 22 / 4
Регистрация: 09.01.2015
Сообщений: 217
07.06.2015, 21:32 2
Дядя Корней, Можно попробовать запускать код в потоке и при возникновении ошибки( Пропал интернет), ставить поток на паузу а при появлении или исправлении ошибки возобновлять поток?
0
diadiavova
3801 / 1349 / 422
Регистрация: 11.04.2015
Сообщений: 2,521
Записей в блоге: 35
07.06.2015, 21:39 3
Дядя Корней, если WebClient используешь, то у него есть ряд событий, позволяющих контролировать процесс загрузки. Ну собственно веди журнал загрузки, если файл загружен как надо - ставь метку, если нет - потом вернешься к его закачке.

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

Решение

ну... может вот так?
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
Дядя Корней
342 / 281 / 53
Регистрация: 14.08.2014
Сообщений: 967
07.06.2015, 23:34  [ТС] 5
Цитата Сообщение от 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
3801 / 1349 / 422
Регистрация: 11.04.2015
Сообщений: 2,521
Записей в блоге: 35
07.06.2015, 23:39 6
Цитата Сообщение от Дядя Корней Посмотреть сообщение
Что такое AddressOf DownloadDataCallback что я должен сюда поставить?
Обработчик. Это подписка на событие. Можно подписываться при помощи WithEvents и Handles, а если надо иметь возможность подписаться или отписаться динамически, то соответственно AddHandler и RemoveHandler. А после AddressOf имя метода-обработчика. Естественно он должен иметь подходящую сигнатуру.
1
Дядя Корней
342 / 281 / 53
Регистрация: 14.08.2014
Сообщений: 967
07.06.2015, 23:55  [ТС] 7
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
LEonardo_
13 / 13 / 3
Регистрация: 05.06.2015
Сообщений: 92
08.06.2015, 13:22 8
А... Да, правда, ошибка... Просто я прямо тут на форуме писал вообщем-то без компиляции... Вот и просмотрел...
Извините, больше так не буду
0
08.06.2015, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2015, 13:22

Выполнить действия при нажатии в область нарисованного квадрата
Мне нужно сделать так, чтобы при нажатии внутри квадрата r1 (нарисованного на...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru