Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 |

 

  Вопрос: Как сделать ожидание подключения интернет соед.? Добавлено: 16.07.10 10:31  

Автор вопроса:  Michael Melchakov | ICQ: 302272185 
То есть, мне необходимо скачать файл после подключения инета. Как проверить инет - использую такую вещь
Dim client As New Net.WebClient
Dim currentversion, lastversion As String


Try
lastversion = client.DownloadString("http://xxx.ru/about.txt")
Catch ex As Exception
client.Dispose()
MsgBox("Не удалось связаться с сервером.")
Exit Sub
End Try


client.Dispose()


Но это единичный случай проверки. Если зациклить данную вещь, то программа просто напросто зависает, до подключения. Если ставить на паузу между данными запросами -
System.Threading.Thread.Sleep(2000)

то тоже зависание программы (хотя уже проц не используется).

Как можно сделать так, чтобы производилась проверка доступности файла (или соединения инет по http), но без подвисания программы?
Или как вариант - производилась проверка, например каждые 2 минуты...?

Ответить

  Ответы Всего ответов: 32  

Номер ответа: 1
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #1 Добавлено: 16.07.10 11:55
http://msdn.microsoft.com/ru-ru/library/system.net.webclient.aspx?ppud=4
в конце есть неплохой пример

Ответить

Номер ответа: 2
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #2
Добавлено: 16.07.10 12:08
Я что-то слышал о таймерах...

Ответить

Номер ответа: 3
Автор ответа:
 Сергей



ICQ: 558230345 

Вопросов: 7
Ответов: 91
 Профиль | | #3 Добавлено: 16.07.10 15:10
Executioner
Я что-то слышал о таймерах...

по таймеру можно сделать обращение, но все равно не угадаешь окончание запроса. А ечли использовать Stream, то выполнение идет синхронно и обработка потока начнется только после аго полного получения. а по таймеру можно поставить обработку максимального времени запроса и его превышение с выдачей ошибки.

Ответить

Номер ответа: 4
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #4 Добавлено: 16.07.10 15:33
делай или My.Computer.Network.Ping и\или выводи во второй поток

Ответить

Номер ответа: 5
Автор ответа:
 Michael Melchakov



ICQ: 302272185 

Вопросов: 12
Ответов: 31
 Профиль | | #5 Добавлено: 16.07.10 17:01
Сергей, спасибо за ответ, но для меня это было сложновато...
Сделал через таймер - проверку соединения (поставил проверку раз в секунду... проц вроде не грузит, память почти не кушает...

Если надо могу выложить пример..?

Ответить

Номер ответа: 6
Автор ответа:
 Michael Melchakov



ICQ: 302272185 

Вопросов: 12
Ответов: 31
 Профиль | | #6 Добавлено: 16.07.10 17:02
Спасибо большое за подсказки :)

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 16.07.10 17:07
Чтоб делать проверку без подвисания, ее нужно запускать в отдельном потоке, или как асинхронную IO операцию, или в ThreadPool (через Delegate.BeginInvoke)

Ответить

Номер ответа: 8
Автор ответа:
 Coloss



ICQ: 479007356 

Вопросов: 15
Ответов: 37
 Профиль | | #8 Добавлено: 16.07.10 23:18
конечно выкладывай!

Ответить

Номер ответа: 9
Автор ответа:
 Michael Melchakov



ICQ: 302272185 

Вопросов: 12
Ответов: 31
 Профиль | | #9 Добавлено: 17.07.10 08:10
Сделано у меня так.
На форме добавлен элемент таймер с параметром Interval=1000
  1.  
  2. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  3.  
  4.         ' проверка связи
  5.         Dim client As New Net.WebClient
  6.         Dim currentversion, lastversion As String
  7.         Try
  8.             lastversion = client.DownloadString("http://xxx.narod.ru/xxx.txt")
  9.         Catch ex As Exception
  10.             client.Dispose()
  11.             'MsgBox("Не удалось связаться с сервером.")
  12. ' здесь действия если не удалось связаться с сервером и получить доступ к http://xxx.narod.ru/xxx.txt
  13.             Exit Sub
  14.         End Try
  15.         '    MsgBox("удалось связаться с сервером.")
  16.         client.Dispose()
  17. ' здесь действия если удалось связаться
  18.  
  19.         'пример скачивания файла (с заменой если уж файлик на компе присутствует
  20.         Dim WC As New System.Net.WebClient
  21.         WC.DownloadFile("http://xxx.narod.ru/xxx.txt", "c:\xxx.txt")
  22.         WC.Dispose()
  23.  
  24. ' отключение таймера
  25. Timer1.Enabled = False
  26.  
  27. End Sub



в этом случае идет следующее, каждую секунду идет проверка интернета (в том числе не возникает ошибок при блокировке фаероом, или отключенной сети и т.п.). Если проверка проходит успешно, то выполняется скачка файла и таймер останавливается, т.е. больше проверок не идет.

Вроде так. Подвинсаний проги не заметил, память кушается в моей програмке на 23 метра :( но в нынешних условиях это вроде не много ;)

Ваши замечания? ;)

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 17.07.10 11:24
Таймер из Windows Froms срабатывает в UI потоке, поэтому пока идет загрузка, окно не будет реагировать на действия, будет зависшим.

Ответить

Номер ответа: 11
Автор ответа:
 Michael Melchakov



ICQ: 302272185 

Вопросов: 12
Ответов: 31
 Профиль | | #11 Добавлено: 17.07.10 12:04
так то да :) но это уже можно и потом подредактировать. Но что кассается моего случая, файлик загружаемый - очень маленький, загрузится быстро... :)

Ответить

Номер ответа: 12
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #12 Добавлено: 17.07.10 14:29
Если инет работает, а если нет то будет висеть пока не выкинет таймаут

Ответить

Номер ответа: 13
Автор ответа:
 Michael Melchakov



ICQ: 302272185 

Вопросов: 12
Ответов: 31
 Профиль | | #13 Добавлено: 17.07.10 16:38
а вот тут ты не прав.. не висит ;) опробовано :)

Ответить

Номер ответа: 14
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 17.07.10 20:05
не висит

Оно не может не висеть.. это ты не прав, потому что как уже было сказано джедаем Artyom
Таймер из Windows Froms срабатывает в UI потоке

И вот с этим не поспоришь.. А чтоб бы ты уверовал в его правоту просто отключи инет и запусти свой код.. и ты увидишь как твоя софтина висит.. ибо ты не ведаешь что творишь юный падован..

Ответить

Номер ответа: 15
Автор ответа:
 Michael Melchakov



ICQ: 302272185 

Вопросов: 12
Ответов: 31
 Профиль | | #15 Добавлено: 17.07.10 21:32
я тоже не спроста пишу... уже код написан, прога работает.
Отключил инет, запустил программу - сразу начинает работать проверка инета (не скачка файла а именно проверка).
Форму можно перетаскивать, работают кнопки... Или я не правильно понимаю ваши слова - "висеть" либо что то где то тут не так :)

Давайте потом переделаю то что у меня прога скачивает... выложу прогу и код? ;)

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам