| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB .NET > Работает криво Document.Images.Count |
| Автор: Rustemka 9.12.2006, 23:10 |
| Здравствуйте. Имеем скаченную страницу на жестком диске (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? |
| Автор: DarkDragon 10.12.2006, 10:52 | ||
Сам ты косячешь мелкософтцы молодцы! Знаешь почему так? А все потому что страница еще не загружена, и ты пытаешься получить элементы рисунков(которых еще нет в документе). Избежать этого тебе поможет следующий код:
Теперь после каждого Navigate, ты получишь точную информацию об элементах в документе |
| Автор: Rustemka 10.12.2006, 12:58 |
| Спасибо большое 1. А что в моем первом варианте делал Msgbox , почему он "помогал" и с ним работала программа? 2. И если wb.Navigate(fname) выделить в отдельный поток Thread, он будет "вешать" программу пока не загрузит страницу, или можно сделать много потоков и они Независимо будут загружать страницы (из интернета). Или надо запускать много программ одновременно? Жалко а то оперативную память. По 30 Мбайт каждый запуск потребляет! |
| Автор: DarkDragon 10.12.2006, 15:06 | ||||
MsgBox вызывается модальным способом (т. е. блакирует форму из которой он был вызван), в это время WebBrowser успешно загружает страницу, а после того как ты закроешь MsgBox, следом идет загрузка изображений, которые уже загрузились в Document.
Вряд ли можно запустить несколько потоков для одного wb, т. к. они все будут обращаться к одной и той же ф-ции, которая разбирает, загружает страницу в одно и то же место и выресовывает её на одну и ту же форму(контрол), и скорее всего получишь класную ошибку, или фигню какую нибудь. Так что грузи много програм, или вместе с потоками создавай столько же webbrowser'ов, и каждый из них пусть загружает свою страницу. Но странно для чего же тебе это надо? |
| Автор: Rustemka 10.12.2006, 22:14 |
| Картинки смотреть :-) Думаешь в нескольких потоков несколько веб браузеров не будет тормозить? Если я сделаю и несколько окон, ну к примеру 5 потоков, и 5 окон нарисую? |
| Автор: DarkDragon 11.12.2006, 07:50 | ||
Возможно будет! Это все уперается в: производительность твоего компа, производительность ОС (можно так забить ОС всяким хламом, что он будет туга работать, ну и не всегда хламом, вообщем сервисы, драйвера, реестр, и т. д.), интернет соединение, ну и как программа будет работать. Вроде же спокойно грузит IE в нескольких окошках. А ты в TabPage зделай Если будешь использовать потоки вместе с несколькими wb, используй метод обработки собыйтий (Navigated), это будет легче, и системизированней, нежели второго примера |