В Form использую WebView2, работает coreWebView2.Navigate(url)и Reload();
Но иногда страница не успевает загрузиться, как начинается ее обработка. https://hatchjs.com/webview2-wait-for-page-to-load/ написано: "Дождаться загрузки веб — страницы в Webview2 можно двумя способами:
***Использование метода `WebView2.WaitForLoadAsync`**
***Использование события `WebView2.NavigationCompleted`**"
то же самое. Возможно отсутствует ссылка на сборку. Какую сборку?
Аналогично с попыткой использования события NavigationCompleted.
Может все работает только в WPF? Но почитал документацию, там сказано, что события должны работать и в Form.
В чем ошибка, как исправить?
Re: Как в WebView2 дождаться окончания загрузки страницы?
Здравствуйте, Passerby, Вы писали:
P>Здравствуйте, BlackEric, Вы писали: BE>>Если будет совсем плохо, то переделайте одну форму на WPF. Они нормально живут в WinForms приложении.
P>Какую форму WPF добавить в в WinForms приложение? Или имеется в виду сделать новый проект WPF и и в него добавить WebView2?
У вас же WebView2 отображается на какой-то форме? Можно взять ее не из WinFroms, а из WPF.
Или если так не получается, то можно сделать отдельное WPF приложение и работать с ним.
Здравствуйте, BlackEric, Вы писали: BE>можно сделать отдельное WPF приложение и работать с ним.
Сделал WPF.
await Microsoft.Web.WebView2.Wpf.WebView2.WaitForLoadAsync("https://www.microsoft.com");
await webView.WaitForLoadAsync("https://www.microsoft.com");
В обоих случаях ошибка: нет такого метода.
Re[5]: Как в WebView2 дождаться окончания загрузки страницы?
Здравствуйте, Passerby, Вы писали:
P>Здравствуйте, BlackEric, Вы писали: BE>>можно сделать отдельное WPF приложение и работать с ним. P>Сделал WPF. P>await Microsoft.Web.WebView2.Wpf.WebView2.WaitForLoadAsync("https://www.microsoft.com"); P>await webView.WaitForLoadAsync("https://www.microsoft.com"); P>В обоих случаях ошибка: нет такого метода.
У WebView2 есть свойство webView21_NavigationCompleted. Можно подписаться на него.
Но я не уверен, что если на странице используются WebSocket (SignalR) оно будет всегда корректно отрабатывать. Так же могут быть проблемы, если html как-то генерится на самом клиенте через JavaScript.
Поэтому возможно имеет смысл сделать ручное ожидание проверяя наличие каких-либо html элементов на странице или же просто по таймеру. Здесь нужно подбирать решение под конкретную страницу.
Вот есть не плохой пример: WV2.VividBroker.Sample.Solution.
Здравствуйте, BlackEric, Вы писали:
BE>У WebView2 есть свойство webView21_NavigationCompleted. Можно подписаться на него.
Еще раз попробовал NavigationCompleted. Все ОК. В первом сообщении написал, что система пишет, что такого свойства нет, неверно его вызывал. Правильно:
Только сейчас непонятно, если загрузка страницы зависнет, этого события NavigationCompleted надо будет ждать вечность? BE>Вот есть не плохой пример: WV2.VividBroker.Sample.Solution.
Спасибо. Посмотрю. А пока реализовал проверку на наполнение страницы. WPF работает хуже, чем Form. Парсю содержимое по ключевым словам и затем сначала отображаю строку в RichTextBox, а затем озвучиваю эту строку. В Forn все нормально. А в WPF сначала происходит озвучка. Поставил на метод атрибут [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)], ничего не изменилось. Поставил задержку:
Порядок. Но при меньших задержках иногда нарушается порядок инструкций.
И текст в RichTextBox в Form масштабируется при CTRL + колесико мыши, а в WPF нет.
Жаль, что нет асинхронности: хотел несколько контролов WebView2 поместить и запустить их асинхронно, оказывается, нельзя.