|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.11.2014, 14:35 | #1 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Универсальный метод или как развести ?
Уважаемые, подскажите как правильно развести по событиям\методам.
Создаю экзепляр вэбклиента и эвентом вывожу данные. Однако, если создание вэбклиента запустить в цикле, то в эвенте будет выводиться информация каждого экземпляра, что делает такую инфу бесполезной. Собственно вопрос, как развести вновь созданные экземпляры и эвенты ? Смотрю в сторону универсальных методов, однако, правильно задать не получается. Может кто сталкивался, как распаралелить ? |
02.11.2014, 15:08 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Не понял о чем вопрос и какую проблему решаем, но как минимум в методе-обработчике события в параметрах есть объект его создавший.
"Универсальные" это generic что ли? И чем они помогут, что вы с ними делать хотите?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
02.11.2014, 15:28 | #3 | |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Цитата:
Код:
Как сделать так, что бы wb_DownloadProgressChanged выводил инфу для нескольких экземпляров ? А универсальные методы - эт вот что имею введу: http://msdn.microsoft.com/ru-ru/library/twcad0zb.aspx т.е. wb_DownloadProgressChanged<i> - как я понимаю. |
|
02.11.2014, 15:44 | #4 | ||
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
"нечитабельность" зависит только от того, что и для чего вам надо прочитать.
Чтобы идентифицировать webclient в методе-обработчике есть параметр, в котором передается ссылка на объект, который сгенерировал событие. Цитата:
Цитата:
Когда не было generic (< .NET 2.0) были коллекции просто для object (ArrayList), что не очень удобно, постоянно приводить к нужному типу при доступе к элементам коллекции и т.д. И тем более нельзя сделать не generic метод generic-ом. Он либо такой изначально, либо нет.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 02.11.2014 в 16:08. |
||
02.11.2014, 15:51 | #5 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Ну скажем прогресс бар обновляется сразу для всех созданных элементов, т.е. постоянно "дергается" то вперед, то назад.
Для отображения тех же % - то больше, то меньше из-за разного веса файлов. Приведите пожалуйста пример, как должно быть реализовано, а то уже голова кипит. |
02.11.2014, 16:04 | #6 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Дергался это как? Они ж параллельно загружаются, а не последовательно. Обычно либо складывают размер всех файлов для макс. значения прогрессбара, либо отдельный для каждого.
Кстати, а зачем там Dispose? Вы ж только запустили загрузку (в другом потоке), но не факт, что она уже завершилась. и try catch {} без адекватной обработки исключений в catch — обычная плохая идея. (зависит от задачи, но хотя бы в какой-нибудь лог записать, а то так никто и не узнает об ошибке и будет удивляться почему всё молча не работает).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
02.11.2014, 16:12 | #7 | |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Цитата:
По Dispose, то исходя из async то по идее экземпляр будет убиваться строго после загрузки. (как я думаю, хотя в тестовом режиме 100 файлов скачалось и убились клиенты без ошибок) Что до try catch, то файлы качаются из нестабильного сервера, который часто не доступен, таким образом исключения не прерывают работу программы, т.е. скажем для 1 - 10 файлов сервер доступен, до с 10 по 80 сервер не доступен, а дальше опять работает. При такой конструкции закачка работает максимально эффективно (качает все что доступно на данный момент). тут больше интересует как сделать вывод информации для каждого экземпляра отдельно. (что вы и предложили выше). |
|
02.11.2014, 16:35 | #8 | |||
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Цитата:
Смысл метода в том, что при вызове DownloadFileAsync он запускает загрузку в другом потоке, а текущий поток не блокируется (в отличии от DownloadFile) и идет дальше (вызывая Dispose). Цитата:
Цитата:
Код:
Или такой более краткий вариант с лямбдой: Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 02.11.2014 в 17:15. |
|||
02.11.2014, 18:08 | #9 |
Форумчанин
Регистрация: 20.10.2011
Сообщений: 433
|
Alex11223, благодарю! все работает как часы!
Код:
Если не затруднит расскажите по подробнее А так же интересен ваш вариант с WebClient: WebClient wb = (WebClient) sender; Я не увидел вашего сообщения и начал через делегат писать ... с переменным успехом правда - не думаю что делегат в данной ситуации вообще бы сработал (можно ваш комментарий по данному поводу) Спасибо в любом случае! |
02.11.2014, 18:20 | #10 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
o и args это параметры метода. Тоже, что и в
Код:
Цитата:
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Процедуры и функции как метод класса, или... | Pcrepair | Общие вопросы Delphi | 4 | 03.09.2013 21:32 |
Интернет магазины или как не дать себя развести | whatever | Свободное общение | 13 | 17.04.2013 00:15 |
MS SQL Server: универсальный Logger сделанный как триггер | Glen | SQL, базы данных | 8 | 11.03.2013 13:59 |
Как объявлять (или описывать) метод locate? | Andr_zdes | Помощь студентам | 6 | 21.05.2009 14:22 |
Как создать универсальный шаблон документа? | CoolMan | Microsoft Office Word | 1 | 18.12.2007 09:10 |