get { return (Func<string, Task<string>>)GetValue(EvaluateJavascriptProperty); }
                  
                  
                      set { SetValue(EvaluateJavascriptProperty, value); }
                  
                  
                  }
                  
                  
                  
                  
                  
                  internal class JavascriptResult : Java.Lang.Object, IValueCallback
                  
                  
                  {
                  
                  
                      private Action<string> _callback;
                  
                  
                      public JavascriptResult(Action<string> callback)
                  
                  
                      {
                  
                  
                          _callback = callback;
                  
                  
                      }
                  
                  
                  
                  
                  
                      public void OnReceiveValue(Java.Lang.Object result)
                  
                  
                      {
                  
                  
                          _callback?.Invoke(Convert.ToString(result));
                  
                  
                      }
                  
                  
                  }
                  
                  
                  
                  
                  
                  protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
                  
                  
                  {
                  
                  
                      base.OnElementChanged(e);
                  
                  
                      ....
                  
                  
                      var webView = e.NewElement as NewWebView;
                  
                  
                  
                  
                  
                      webView.EvaluateJavascript = async (js) =>
                  
                  
                      {
                  
                  
                          var reset = new ManualResetEvent(false);
                  
                  
                          var response = string.Empty;
                  
                  
                  
                  
                  
                          Device.BeginInvokeOnMainThread(() =>
                  
                  
                          {
                  
                  
                              Control?.EvaluateJavascript(js, new JavascriptResult((r) =>
                  
                  
                              {
                  
                  
                                  response = r;
                  
                  
                                  reset.Set();
                  
                  
                              }));
                  
                  
                          });
                  
                  
                          await Task.Run(() => { reset.WaitOne(); });
                  
                  
                          return response;
                  
                  
                      }
                  
                  
                      .....
                  
                  
                  }
                  
                  
                  
                  
                  
                  Все работает, но иногда приложение падает. Вот такая информация:
                  
                  
                  
                  
                  
                  Fatal Exception: android.runtime.JavaProxyThrowable: System.ObjectDisposedException: Cannot access a disposed object.
                  
                  
                  Object name: 'Android.Webkit.WebView'.
                  
                  
                    at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) [0x00029] in <8b3b636835d84984ba4604c1f57b1983>:0 
                  
                  
                    at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00000] in <8b3b636835d84984ba4604c1f57b1983>:0 
                  
                  
                    at Android.Webkit.WebView.EvaluateJavascript (System.String script, Android.Webkit.IValueCallback resultCallback) [0x00050] in <84ca7e914f6148f0b961431a9ac4287b>:0 
                  
                  
                    at Wrapping.Android.NewWebViewRenderer+<>c__DisplayClass7_0.<OnElementChanged>b__1 () [0x0003a] in <2ffd7f4aee294156b136af0874bc6181>:0 
                  
                  
                    at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in <84ca7e914f6148f0b961431a9ac4287b>:0 
                  
                  
                    at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in <84ca7e914f6148f0b961431a9ac4287b>:0 
                  
                  
                    at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.71(intptr,intptr)
                  
                  
                         at mono.java.lang.RunnableImplementor.n_run(RunnableImplementor.java)
                  
                  
                         at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
                  
                  
                         at android.os.Handler.handleCallback(Handler.java:751)
                  
                  
                         at android.os.Handler.dispatchMessage(Handler.java:95)
                  
                  
                         at android.os.Looper.loop(Looper.java:154)
                  
                  
                         at android.app.ActivityThread.main(ActivityThread.java:6196)
                  
                  
                         at java.lang.reflect.Method.invoke(Method.java)
                  
                  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
                  
                  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
                  
                  
                
Вероятно какой-то метод дёргается после закрытия страницы
Да, причём сложно отловить когда приложение "падает".
Ну отлавливай когда в OnElementChanged NewElement == null, отменяй подписки, сохраняй флаги и не выполняй действий с вьюхой после этого
"Падает" в основном потоке.
Понял, спасибо за наводку
Ну логично. Обращение к вьюхе идёт же
Обсуждают сегодня