![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
да. Т.е. я сначала считываю информацию из базы, о количестве файлов и промежутках через которые их надо сохранять, затем создаю вот таким образом экземпляры класса:
и ничего опять не работает(( и я так понимаю при таком создании экземпляры класса будут работать без Event'ов? Это сообщение отредактировал(а) s180 - 3.11.2009, 15:53 |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Во-первых работатьб смассивом таким образом не есть хорошо. Используй List(Of ImageUpdateTask)
Во-вторых, я не знаю, что там у тебя база выдаёт. По идее должно работать, а для того, чтобы события как-то отрабатывали на них подписаться надо. Добавлено через 2 минуты и 41 секунду Да и ещё...первую строчку кода надо вписать в код класса, а то что за ней - в код процедуры
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| s180 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
база выдаёт всё как положенно, проверил несколько раз.
это вписал в код класса. как подписаться на события? с помощью WithEvents? видимо у меня не отрабатывает событие _timer_Elapsed, раз он скачивать не хочет. |
||||||
|
|||||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
А у меня в примере разве не было подписки на события?
http://msdn.microsoft.com/ru-ru/library/7taxzxka.aspx А как положено? В каком формате она выдаёт адреса, например? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
кажется разобрался...
Это сообщение отредактировал(а) s180 - 3.11.2009, 16:44 |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
возник ещё вопросы.
1. позволяет ли данный метод ловить например обрыв связи при скачивании файла, или какие-нибудь другие ошибки? 2. в процессе экспериментов оказалось, что такая реализация не подходит, т.к. при сохранении файлов интервал не выдерживается, т.е. опоздания с сохранением получаются от 1 до 4 сек. естесственно за сутки может набежать немалое время разницы. Если использовать потоки поможет ли это улучшить ситуацию? Это сообщение отредактировал(а) s180 - 5.11.2009, 11:31 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Надо поэксперементировать с событиями. Например завершение загрузки произошло, а процент загруженных данных меньше ста. Я тут точно сказать не могу. Надо пробовать. Просто я так всё устроил, что новый интервал начинает отсчитываться только по завершении загрузки файла. Можно сделать так, чтобы это происходило строго через заданный интервал. Они и так используются, только неявно. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| s180 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
да, это я понял и переделал, вот сейчас тестирую как раз. может ситуация улучшится.
т.е. использование, например, BackgroundWorker ситуацию в явно лучшую сторону не поменяет? и ещё при первом запуске выдаётся: WebClient does not support concurrent I/O operations на строчке DownloadFileAsync, но при нажатии несколько раз. программа продолжает работать, т.е. видимо при запуске происходит какой-то "косяк". В чём может быть проблема? появилось после того как убрал флаг у таймера выполнения только один раз. Это сообщение отредактировал(а) s180 - 5.11.2009, 13:22 |
||||
|
|||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Там если этот флаг убирается, то надо убрать и код повторного запуска при окончании загрузки. Хотя скорее всего проблема в том, что предыдущая загрузка не завершена и даётся команда на новую. Возможно следует проверить завершена ли предыдущая загрузка. Добавлено @ 14:01
Я не понял какая сторона лучшая. Я ведь объяснил, что этот класс так работает потому, что так спроектирован. Это сообщение отредактировал(а) diadiavova - 5.11.2009, 14:05 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
я имею ввиду, если использовать BackgroundWorker для этой задачи, это может поменять ситуацию? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
В какую сторону её надо поменять? Иными словами : чего ты хочешь добиться его использованием? Загрузка и так происходит в отдельном потоке. Сформулируй более точно, что сейчас не так и какие изменения ты хочешь ввести. Правда сразу следует оговориться, что тут есть ряд нюансов. Ты не можешь обновлять один и тот же файл одновременно из двух потоков. Завязав логику соблюдения интервалов между началом обновления ты закладываешь в код грабли. У конечного пользователя просто-напросто доступ к интернету может быть более скромным и за тот промежуток времени, который ты отмеришь, прога не успеет обновить файл даже один раз. В результате ты получишь сбой. Хотя мне вообще не совсем понятно зачем начинать новое обновление, когда ещё старое не завершено. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
спустя 20 мин. работы, программа выдаёт сообщение:
The CLR has been unable to transition from COM context 0x20c058 to COM context 0x20c1c8 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations. и после чего вылетает. Никто не сталкивался, как с этим бороться? |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
прочитал на MSDN'е, что такой exception можно отключить:
|
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
ничего не могу понять. почему промежуток сохранения файлов продолжает расти?
вот код:
так вот в итоге у меня получается, что сохраняются файлы: 14-25-50.jpg 14-30-50.jpg 14-35-50.jpg 14-40-51.jpg 14-45-51.jpg 14-50-51.jpg 14-55-51.jpg 15-00-51.jpg ... через какое-то время может ещё на секунду увеличится, т.е. получается, что если так будет сохраняться, то время сохранения будет существенно отличатся от того, что надо. Я так понимаю, что время начала закачки почему-то сдвигается, хотя работает по событию таймера. Это сообщение отредактировал(а) s180 - 6.11.2009, 14:45 |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
в общем, путём экспериментов выяснилось, что событие _timer_Elapsed, срабатывает не в точное время. При чтении свойства ElapsedEventArgs.SignalTime выясняется, что сработка происходит не каждые, например 2000мс, а 2159 или 2005мс и т.д. Т.е. если у нас _timer.Interval=2000, то смотрим как происходит запись файлов:
1. ElapsedEventArgs.SignalTime=2005 2. ElapsedEventArgs.SignalTime=2005+2000+погрешность .... Поэтому пока решил после каждого события уменьшать _timer.Interval на ElapsedEventArgs.SignalTime.Millisecond. Посмотрим, что выйдет. |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |