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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дождаться загрузки браузера 
V
    Опции темы
Алексеу
Дата 7.1.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хотел обратится с таким вопросом - использую webBrowser в программе, который работает в отдельном потоке. Браузер должен пройти по ряду сайтов, извлекая нужную информацию. Проблема в том, что если в цикле вызывать

Код

webBrowser1.Url = new Uri("Адрес_сайта");


то загрузка будет выполнена только последнего ресурса, а все остальные "проскочит". Как можно сделать так, чтобы браузер полностью загружал страницу, извлекал оттуда что-то, и лишь затем переходил на следующую итерацию в цикле?

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


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Алексеу, конечно можно...

когда страница загружена webBrowser кидает событие Navigated


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Алексеу
Дата 7.1.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Partizan, вопрос не в этом. Там есть еще событие DocumentCompleted для этого, но они отработают хорошо только если загружать 1 страницу.

А если нужно грузить в одном браузере много страниц подряд, то нет. 

Например:

Код

for (int i = 0; i < mas.Length; i++)
               {
                   webBrowser1.Url = new Uri(mas[i]);
               }


События DocumentCompleted и Navigated если их вызывать то они отработают только для последнего элемента в массиве. Остальные урлы браузер не загрузит и "проглотит" по ходу выполнения цикла, остановившись на последнем элементе массива.

Вопрос в том как сделать так, чтобы браузер подождал пока по очереди полностью загрузятся все урлы в массиве и будет вытянута информация, а лишь после этого перейти к следующему витку цикла?
PM MAIL   Вверх
nagg
Дата 7.1.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Получаете уведомление Navigated и лезете на следующий урл по очереди...
--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
Алексеу
Дата 7.1.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



nagg, это уведомление получается только на последнем урле массива, все что до этого быстро "перелистывается" не доходя до загрузки, к сожалению.
PM MAIL   Вверх
nagg
Дата 7.1.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вы не совсем меня поняли, я говорил о чём-то таком:
(mas - ваш массив ссылок)

Код

        private void Start()
        {
            // загружаем первую страничку
            webBrowser1.Url = new Uri(mas[0]);
        }

        private int index = 0;
        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            // тут работаете с вашей i-й загруженной страничкой

            // теперь загружаете следующию
            webBrowser1.Url = new Uri(mas[++index]);
        }

--------------------
I am the State...
PM MAIL WWW ICQ Skype   Вверх
diadiavova
Дата 7.1.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Вообще-то, если надо с сервера грузить много документов и тянуть и зних инфу, то лучше использовать WebClient, забивать данные в очередь и обрабатывать её в отдельном потоке. Быстрее будет.


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


Шустрый
*


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

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



Спасибо за советы!

Решил следующим образом:

Код

          private void load(int param)
           {
               webBrowser1.Navigate(mas[param]);
           }

           private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
           {
//Переменная ниже объявлена как глобальная в классе
               cur_iter++;
               load(cur_iter);
           }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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