Я пытаюсь написать функцию в приложении VB.Net WPF для получения высоты документа в элементе управления MS WebBrowser. Я могу получить это значение только через некоторое время, когда страница была отображена. Итак, я попробовал:Как дождаться события внутри функции?
Private Function GetHeight(ByVal htmlstring As String) As Integer
Dim wb As New WebBrowser 'Declare WebBrowser
wb.Width = 940 'set Width
wb.NavigateToString(htmlstring) 'Navigate to content
Do Until wb.IsLoaded 'Wait until page is rendered
Loop
'Get DOM Document
Dim doc As mshtml.HTMLDocument = wb.Document
'Get sought value
Dim RetVal As Integer = CInt(doc.body.getAttribute("scrollHeight").ToString)
doc = Nothing : wb.Dispose() : wb = Nothing 'Free variables
Return RetVal 'Return value
End Function
Но вызов такой функции заставляет приложение замораживать. Что мне делать? Нужно ли мне внедрять ключевые слова Async и Await, а также Threading.Tasks и как это сделать?
Спасибо за ваш ответ. Это действительно помогло. Действительно, я должен добавить WebBrowser в Visual Tree; иначе он не будет перемещаться. Кстати, я решил другую проблему, вставив FormsApplication.DoEvents() внутри цикла и смог вернуть целочисленное значение из функции. Ответ на ваш вопрос «почему мне нужно создать WebBrowser и вернуть его высоту из функции»: Мне нужно было настроить высоту iframe с заданной шириной таким образом, чтобы iframe соответствовал его контенту. – Zagavarr
@ Zagavarr, 'DoEvents' - это плохая бандад для этого. Этот ответ - лучший маршрут. – OneFineDay
@Rowbear, метод 'DoSomething' должен быть' Sub', так как он не должен или ничего не должен возвращать. – OneFineDay