Я вступаю в WPF - впервые в (VB) .NET - и пытаюсь воссоздать проект, который я начал в MS Access VBA. Он в основном разбивает серию страниц в веб-приложении. Как вы могли догадаться, у меня возникают проблемы с событием LoadCompleted.Ожидание WebBrowser для полной загрузки между несколькими вызовами Navigate()
Я искал и нашел некоторую информацию об этом, но «поток» кода поддается только ожиданию загрузки одной страницы. Например:
http://social.msdn.microsoft.com/Forums/nn-NO/wpf/thread/52c1bc55-dd41-468c-8759-a42726635d4b
Все исполнения кода выполняется в случае DocumentLoaded, который прекрасно работает, когда вам просто нужно перейти на одну страницу и выполнить код. Но мне нужно выполнить серию этих циклов для моего приложения.
Как я могу надежно дождаться, когда документ будет полностью загружен, сохраняя при этом выполнение кода в том же Sub и не блокируя поток пользовательского интерфейса?
Вот основная идея того, что я пытаюсь сделать.
- Перейдите на страницу
- Дождитесь страницы, чтобы полностью загрузить
- делать вещи
- Перейдите на страницу
- полоскание, Repeat
PS - .NET очень ново для меня поэтому, пожалуйста, не делайте мой мозг переполнением стекол;)
Thanks, Брайан
- ## EDIT ## -
Это то, что я использую, чтобы сделать в VBA. Это именно то, что я пытаюсь сделать, только в «.NET», как и без блокировки UI тему:
Dim oIE = New SHDocVw.InternetExplorer
With oIE
.Navigate(strURL)
.Visible = False
' loop until the page finishes loading
Do While oIE.Busy : Loop
Do While oIE.ReadyState <> 4 : Loop
'Code goes here to read DOM, get fields and click a button (logging in to site)
'My code execution is done and now I'm ready to go to the next page and read the DOM
.Navigate(strURL)
End With
. . . .
Все. Повторите для n раз. мои взаимодействия с каждой DOM существенно различаются.
dbaseman, спасибо, что ответили. К сожалению, URL-адреса, которые я просматриваю, неизвестны. Другими словами, количество требуемых URL-адресов и сам URL-адрес динамически генерируются после каждого «цикла» – brian
@brian. Разве это не было бы принципиально? Просто вызовите некоторую реализацию ** getNextUrl() ** и уходите? – McGarnagle
Ах, я вижу. Вы говорите, что я могу добавлять элементы в список «на лету», поскольку я повторяю этот список. Но мои действия (код) для каждого URL-адреса разные. Я просто собираюсь иметь огромный SELECT..Case для обработки каждого URL-адреса? Поскольку я не знаю URL-адрес, пока он не станет следующей страницей в списке, как я могу сопоставить текущий URL-адрес браузеров с соответствующим кодом? Надеюсь, я задаю вопрос достаточно ясно. Я ценю, что вы предлагаете мне время, чтобы помочь. Спасибо. – brian