Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Загрузить файл из интернет...


Автор: Machaon 13.9.2008, 18:48
Требуется загрузить файл из интернет, но чтобы прогресс бар показывал процент загрузки файла.
 
загружаю так  

Код

 My.Computer.Network.DownloadFile("http://yandex.ru/index.hytml", "C:\index.html")


Но вот как прикрутить к этому прогресс бар незнаю ((

Помогите пожалуйста.

Автор: diadiavova 13.9.2008, 19:57
Для загрузки файлов из сети надо использовать объект System.Net.WebClient. У него есть метод DownloadFileAsync, для контроля процесса загрузки используй обработчик события DownloadProgressChanged этого же объекта. Аргумент обработчика типа System.Net.DownloadProgressChangedEventArgs имеет свойство ProgressPercentage. Оно и покажет сколько процентов загружено.

Автор: Machaon 13.9.2008, 20:20
Можно пожалуйста пример новичек в .NET

Автор: diadiavova 13.9.2008, 21:02
Добавляю проект. Всё упрощено, но я думаю понятно(даже новичку). В верхнюю строку вводишь имя скачиваемого файла, в нижнюю  - куда сохранять(можно при помощи диалога), жмёшь загрузить, и наблюдаешь за прогрессом, по окончании загрузки прогрессбар обнуляется.

Автор: Machaon 13.9.2008, 23:04
Спс все работает.

Автор: noob4ever 13.7.2009, 00:48
отличный пример, спасиба но возникает проблема если нужно сделать одновременную закачку 10 файлов

Код

Private Sub ButtonDownload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonDownload.Click
        wc1.DownloadFileAsync(New Uri(Me.TextBoxURI1.Text), Me.TextBoxFileName1.Text)
        wc2.DownloadFileAsync(New Uri(Me.TextBoxURI2.Text), Me.TextBoxFileName2.Text)
        wc3.DownloadFileAsync(New Uri(Me.TextBoxURI3.Text), Me.TextBoxFileName3.Text)
        wc4.DownloadFileAsync(New Uri(Me.TextBoxURI4.Text), Me.TextBoxFileName4.Text) 
    End Sub

Private Sub wc1_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc1.DownloadFileCompleted
        Me.ProgressBar1.Value = 0
    End Sub
    Private Sub wc1_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc1.DownloadProgressChanged
        Me.ProgressBar1.Value = e.ProgressPercentage
    End Sub

    Private Sub wc2_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc2.DownloadFileCompleted
        Me.ProgressBar2.Value = 0
    End Sub
    Private Sub wc2_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc2.DownloadProgressChanged
        Me.ProgressBar2.Value = e.ProgressPercentage
    End Sub

    Private Sub wc3_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc3.DownloadFileCompleted
        Me.ProgressBar3.Value = 0
    End Sub
    Private Sub wc3_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc3.DownloadProgressChanged
        Me.ProgressBar3.Value = e.ProgressPercentage
    End Sub

    Private Sub wc4_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc4.DownloadFileCompleted
        Me.ProgressBar4.Value = 0
    End Sub
    Private Sub wc4_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc4.DownloadProgressChanged
        Me.ProgressBar4.Value = e.ProgressPercentage
    End Sub


отображается прогреcc так: 1-2 progressbar'a движутся, следующие начинают двигаться после закачки предыдущих. как быть?

Автор: diadiavova 13.7.2009, 02:57
На будущее: когда ты задаёшь вопрос просто отредактировав старое сообщение его могут просто не заметить(я кстати заметил случайно и не сразу, что ты отредактироовал пост). Пишешь новое - все кто подписан на тему получают уведомление. Я уже не говорю о том, что новую тему создавать надо, а не искать ту, которая больше всего подходит.

Теперь по вопросу. 
На количество одновременных подключений обычно действуют ограничения. Эти ограничения можно задавать самому в конфигурационном файле, но если этого не делать, то по-умолчанию даётся немного соединений.
Файл конфигурации находится в папке проекта и называется app.config. Это XML - lокумент, его надо открыть в XML-редакторе и добавить в корневой элемент секцию следующего содержания
Код

  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="100"/>
    </connectionManagement>
  </system.net>


Как нетрудно понять из текста, добавляется параметр, который указывает приложению, что для любых адресов(*) максимальное количество соединений - 100. Можешь прописать для конкретных адресов другие данные, поскольку элементов add может быть несколько. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)