Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает DownloadFileAsync 
V
    Опции темы
s180
Дата 2.11.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



новичок в программировании на .NET. Надо скачать файл из интернета, использую следущий код:

   
Код

 Dim WithEvents instanc As WebClient = New WebClient()
    Sub Main()

        Dim fileName, address As String
        address = "http://open-book.ru/uploads/posts/2009-03/thumbs/1236444235_6.0-enterprise-sp6.png"
        Dim uri As Uri = New Uri(address)
        Dim value As New WebProxy

        AddHandler instanc.DownloadFileCompleted, AddressOf qw

        instanc.DownloadFileAsync(uri, "C:\jpegs\1.jpg")

    End Sub


почему-то картинка скачивается 0Кб, и Event'ов никаких не возникает. Метод instanc.DownloadFile работает (но надо указать Proxy: instanc.Proxy = value), а DownloadFileAsync не хочет, в чём может быть проблема.

Это сообщение отредактировал(а) diadiavova - 2.11.2009, 15:21
PM MAIL   Вверх
diadiavova
Дата 2.11.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Вот этот код загрузит файл на рабочий стол и по окончании загрузки отобразит его в пикчербоксе
Код

Imports System.Net

Public Class Form1
    Dim WithEvents instanc As New WebClient
    Dim imgpath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "/imd.png"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim uri As Uri = New Uri("http://open-book.ru/uploads/posts/2009-03/thumbs/1236444235_6.0-enterprise-sp6.png")
        instanc.DownloadFileAsync(uri, imgpath)
    End Sub

    Private Sub instanc_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles instanc.DownloadProgressChanged
        If e.ProgressPercentage = 100 Then
            Me.PictureBox1.Image = Image.FromFile(imgpath)
        End If
    End Sub
End Class




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
s180
Дата 2.11.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



спасибо! действительно работает! ещё вопрос. мне надо с определённым промежутком времени сохранять 10 файлов из разных мест, промежуток для всех разный. Где-то 1мин, где-то час. Лучше использовать потоки для такой задачи? если можно небольшой пример.
PM MAIL   Вверх
s180
Дата 2.11.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



Ещё Вы писали о том как сделать чтобы скачивалось одновременно несколько файлов.

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

Код

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

 
Не могу найти этот файл в папке проекта, где он может быть ещё?

Это сообщение отредактировал(а) diadiavova - 2.11.2009, 15:21
PM MAIL   Вверх
diadiavova
Дата 2.11.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Я бы реализовал это в виде списка заданий. Расклад примерно следующий:
Создаётся класс, представляющий задачу, в нём есть свойство, указывающие время очередной закачки, интервал между закачками, и адрес картинки. Так же можно создать метод, котороый автоматически будет прибавлять интервал ко времени.
Далее, для каждой картинки создаётся такой объект со всеми данными и из них формируется коллекция.
Добавляем в форму таймер и на каждом тике таймера проверяем, есть ли картинки, которые пора обновлять. Если такие находятся, то обновляем и добавляем ко времени очередной загрузки интервал между загрузками.

А файл конфигурации можно добавить в проект если его там нет. Диалог "Добавить новый элемент"

Добавлено через 37 секунд
И не забывай пользоваться тегом "Код"


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
s180
Дата 2.11.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @ 2.11.2009,  15:20)
Далее, для каждой картинки создаётся такой объект со всеми данными и из них формируется коллекция.

а для чего надо создавать коллекцию?

правильно ли понимаю, что надо использовать Task Class из System.Threading.Tasks?
т.к. проект у меня "бесформенный" можно ли использовать таймер в нём?
PM MAIL   Вверх
diadiavova
Дата 2.11.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(s180 @  2.11.2009,  15:47 Найти цитируемый пост)
System.Threading.Tasks

 smile Что это?
Цитата(s180 @  2.11.2009,  15:47 Найти цитируемый пост)
а для чего надо создавать коллекцию?
Ну я так понял у тебя есть набор задач . Для каждой создаётся объект и их надо где-то хранить.
Кстати, если надо грузить всё асинхронно и это принципиально, то лучше сделать не так как я в первый раз написал, а просто зашивать таймер и вебклиентв каждый такой объект. Вот примерный набросок класса задания. Код не для копипасты и вряд ли сразу заработает, а просто для того, чтобы наглядно показать, что я имею в виду
Код

Imports System.Net

Public Class ImageUpdateTask
    Dim WithEvents _webClient As New WebClient
    Dim WithEvents _timer As New Timers.Timer

    Public Sub Start()
        If Not _timer.Enabled Then
            _timer.Start()
        End If
    End Sub

    Public Sub [Stop]()
        If _timer.Enabled Then
            _timer.Stop()
        End If
    End Sub

    Private Sub _webClient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles _webClient.DownloadProgressChanged
        If e.ProgressPercentage = 100 Then
            _timer.Start()
        End If
    End Sub

    Private Sub _timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles _timer.Elapsed
        _webClient.DownloadFileAsync(Me.SourceImagePath, Me.DestImagePath)
    End Sub

    Dim _sourceImagePath As Uri
    Public Overridable Property SourceImagePath() As System.Uri
        Get
            Return _sourceImagePath
        End Get
        Set(ByVal value As System.Uri)
            _sourceImagePath = value
        End Set
    End Property

    Dim _destImagePath As String
    Public Overridable Property DestImagePath() As String
        Get
            Return _destImagePath
        End Get
        Set(ByVal value As String)
            _destImagePath = value
        End Set
    End Property
    Dim _updateInterval As TimeSpan
    Public Overridable Property UpdateInterval() As System.TimeSpan
        Get
            Return _updateInterval
        End Get
        Set(ByVal value As System.TimeSpan)
            _updateInterval = value
        End Set
    End Property

    Public Sub New(ByVal source As String, ByVal dest As String, ByVal interval As Double)
        With _timer
            .AutoReset = False
            .Interval = interval
        End With
        Me.SourceImagePath = New Uri(source)
        Me.DestImagePath=dest)
    End Sub
End Class



Это сообщение отредактировал(а) diadiavova - 2.11.2009, 16:52


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
s180
Дата 2.11.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



часть понял, но почему-то у меня ничего не переписывается, вызываю таким кодом:

Код

        Dim x As New ImageUpdateTask
        While True
            x.Start()
            x.New("http://open-book.ru/uploads/posts/2009-03/thumbs/1236444235_6.0-enterprise-sp6.png", "C:\Jpegs\1.jpg", 30000)
        End While

PM MAIL   Вверх
s180
Дата 2.11.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



всё!! я окончательно запутался!! теперь и первый ваш класс, который Вы написали скачивает файл размером 0 байт!
PM MAIL   Вверх
diadiavova
Дата 2.11.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(s180 @  2.11.2009,  17:05 Найти цитируемый пост)
 x.New("http://open-book.ru/uploads/posts/2009-03/thumbs/1236444235_6.0-enterprise-sp6.png", "C:\Jpegs\1.jpg", 30000)

Что это? smile 

Код

        Dim x As New ImageUpdateTask( _
"http://open-book.ru/uploads/posts/2009-03/thumbs/1236444235_6.0-enterprise-sp6.png", _
"C:\Jpegs\1.jpg", 30000)
        x.Start()
И всё. Ну и соответственно повторюсь
Цитата(diadiavova @  2.11.2009,  16:28 Найти цитируемый пост)
Код не для копипасты и вряд ли сразу заработает, а просто для того, чтобы наглядно показать, что я имею в виду




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
diadiavova
Дата 2.11.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Вот сопсно рабочий пример. Сохраняет на рабочий стол каждые 10 секунд, и в NumericUpDown при каждом обновлении увеличивает число на 1.

То есть для каждой картинки по такому объекту создай и всё должно работать.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  DownloadFileAsync.rar 462,71 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
s180
Дата 3.11.2009, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



спасибо большое, работает. Но понять не могу, у меня скачивается файл 0Кб! почему такое происходит? может это из-за Proxy? просто DownloadFile качает нормально при указании строчек:

Код

Dim WithEvents instanc As WebClient = New WebClient()
Dim value As New WebProxy
instanc.Proxy = value


а DownloadFileAsync не хочет. Как быть?

Это сообщение отредактировал(а) s180 - 3.11.2009, 09:33
PM MAIL   Вверх
diadiavova
Дата 3.11.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Это свойство указывает прокси-сервер. А просто объект без параметров естественно работать и не должен.
Кстати, там в примере свойство UpdateInterval надо или убрать или переписать. Это свойство-пустышка, ничего не делает. Поначалу хотел сделать по-другому и ввёл его, а потом не использовал. smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
s180
Дата 3.11.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.11.2009

Репутация: нет
Всего: нет



ещё вопрос. мне заранее неизвестно какое количество файлов мне надо качать, я беру это каждый раз из базы (с этим, слава Богу, я сам справился). Как объявлять объект созданного класса при чтении строки из базы, т.е. читаем строку - создаём класс?
PM MAIL   Вверх
diadiavova
Дата 3.11.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Не совсем понял вопрос. 
Для каждой картинки которую надо обновлять из сети через определённые промежутки времени надо создать свой экземпляр класса, указав параметры. Хранить экземпляры надо в специальной коллекции. То есть: Считываются данные из базы, на их основе создаётся экземпляр класса и добавляется в коллекцию, откуда всегда можно получить к нему доступ. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.