Vasiliy F
Vasiliy F

Reputation: 17

Can't handle WebView Navigation

The problem can be a bit strange, but i need to execute NavigationCompleted() method before Test() method ends:

public Test()
       {
           WebView wb = new WebView(WebViewExecutionMode.SeparateProcess);
           wb.Navigate(new Uri(@"Url"));
           wb.NavigationCompleted += NavigationCompleted;
       }
       private async void NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
       {

           //some stuff
       }

I can't use Thread.Sleep() in Test() Method because in this case the WebView can't do it's stuff, and therefore NavigationCompleted() will be called only after the Test () method is completed.

Upvotes: 1

Views: 238

Answers (1)

dear_vv
dear_vv

Reputation: 2358

You could refer to this answer to use AutoResetEvent to wait for the NavigationCompleted event handler occurred. As follows:

   public AutoResetEvent waitForNavComplete;       
        public async void test()
        {
            waitForNavComplete = new AutoResetEvent(false);
            mywebView.Navigate(new Uri(..));     
            mywebView.NavigationCompleted += MywebView_NavigationCompleted;
            await Task.Run(() => waitForNavComplete.WaitOne());
       
        }

        private void MywebView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
        {
         ……
            waitForNavComplete.Set();
        }

Upvotes: 1

Related Questions