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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работает криво Document.Images.Count, Как заставить Правильно работать 
:(
    Опции темы
Rustemka
Дата 9.12.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Имеем скаченную страницу на жестком диске (html).
Код

dim fname as string
Dim wb As New WebBrowser
fname="c:\test.htm"
wb.Navigate(fname)
'А теперь самое интересное. Пытаемся определить количество картинок в странице
MsgBox((wb.Document.Images.Count))
'и если закоментировать строку выше, то нифига не работает
       Dim j As Integer
        j = wb.Document.Images.Count
        Dim j1 As Integer
        For j1 = 0 To j - 1
           msgbox = wb.Document.Images.Item(j1).OuterHtml.ToString
        next j1

Почему так работает код? Как заставить его нормально функционировать "не вызывая" вначале msgbox, методы debug.print и trace.write тоже не помогают. Почему то вначале нужно вызвать "сколько в документе images", msgbox покажет что ноль, а потом переменная j покажет реальное значение !!!
Почему? Что за "косяк" у микрофоста в WebBrowser?
PM MAIL   Вверх
DarkDragon
Дата 10.12.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



Цитата(Rustemka @  9.12.2006,  23:10 Найти цитируемый пост)
Почему? Что за "косяк" у микрофоста в WebBrowser? 

Сам ты косячешь smile 
мелкософтцы молодцы!

Знаешь почему так? А все потому что страница еще не загружена, и ты пытаешься получить элементы рисунков(которых еще нет в документе).
Избежать этого тебе поможет следующий код:

Код

Private Sub OverLoad (sender as object, e as EventArgs)
         Dim j As Integer
        j = wb.Document.Images.Count
        Dim j1 As Integer
        For j1 = 0 To j - 1
           msgbox = wb.Document.Images.Item(j1).OuterHtml.ToString
        next j1
End Sub

AddHandler webBrowser1.Navigated, AddressOf OverLoad // Установи обработчик события в конструкторе, после InitalizeCom..


Теперь после каждого Navigate, ты получишь точную информацию об элементах в документе smile 
PM MAIL   Вверх
DarkDragon
Дата 10.12.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



Еще можно через ReadyState(тогда не нужно устанавливать обработчик события Navigated):
просто добавляем цикл, который завершится после полной загрузки страницы.

Код

   While (webBrowser1.ReadyState.ToString() = "Loading")
      Application.DoEvents() ' Это что бы все работало, а то зависнет!
   End While
   Me.Text = webBrowser1.Document.Images.Count.ToString() ' Смотрим сколько картинок, здесь же можешь ставить свой цикл


Добавлено @ 11:21 
 smile 
Цитата(DarkDragon @  10.12.2006,  10:52 Найти цитируемый пост)
// Установи обработчик события в конструкторе, после InitalizeCom..

А теперь и я косить начел smile Коментарии та я поставил от C#  smile 
PM MAIL   Вверх
Rustemka
Дата 10.12.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое
1. А что в моем первом варианте делал Msgbox , почему он "помогал" и с ним работала программа?
2. И если wb.Navigate(fname) выделить в отдельный поток Thread, он будет "вешать" программу пока не загрузит страницу, или можно сделать много потоков и они Независимо будут загружать страницы (из интернета). Или надо запускать много программ одновременно?
Жалко а то оперативную память. По 30 Мбайт каждый запуск потребляет!
PM MAIL   Вверх
DarkDragon
Дата 10.12.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



Цитата(Rustemka @  10.12.2006,  12:58 Найти цитируемый пост)
1. А что в моем первом варианте делал Msgbox , почему он "помогал" и с ним работала программа?

MsgBox вызывается модальным способом (т. е. блакирует форму из которой он был вызван), в это время WebBrowser успешно загружает страницу, а после того как ты закроешь MsgBox, следом идет загрузка изображений, которые уже загрузились в Document.

Цитата(Rustemka @  10.12.2006,  12:58 Найти цитируемый пост)
. или можно сделать много потоков и они Независимо будут загружать страницы (из интернета). Или надо запускать много программ одновременно?

Вряд ли можно запустить несколько потоков для одного wb, т. к. они все будут обращаться к одной и той же ф-ции, которая разбирает, загружает страницу в одно и то же место и выресовывает её на одну и ту же форму(контрол), и скорее всего получишь класную ошибку, или фигню какую нибудь. Так что грузи много програм, или вместе с потоками создавай столько же webbrowser'ов, и каждый из них пусть загружает свою страницу.

Но странно для чего же тебе это надо?

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


Новичок



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

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



Картинки смотреть :-)

Думаешь в нескольких потоков несколько веб браузеров не будет тормозить?
Если я сделаю и несколько окон, ну к примеру 5 потоков, и 5 окон нарисую?
PM MAIL   Вверх
DarkDragon
Дата 11.12.2006, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



Цитата(Rustemka @  10.12.2006,  22:14 Найти цитируемый пост)
Думаешь в нескольких потоков несколько веб браузеров не будет тормозить?
Если я сделаю и несколько окон, ну к примеру 5 потоков, и 5 окон нарисую? 


Возможно будет! Это все уперается в: производительность твоего компа, производительность ОС (можно так забить ОС всяким хламом, что он будет туга работать, ну и не всегда хламом, вообщем сервисы, драйвера, реестр, и т. д.), интернет соединение, ну и как программа будет работать.

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

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

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


 




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


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

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