Hello all
I want get "right Threading way" when I wait for a JavaScript's result inside android webview (unfortunately function EvaluateJavaScriptAsync doesn't work :-(, cause I have own handler – need both directions from and to Javascript-C# include return values)
I have the functional c# code (see below) but code is quite slow and "not threading perfect"
I need REPLACE "while loop" and Thread.Sleep(100); with something "Threading Ingenious" (catch some message?..), I am just "Threading dummy user"
Thanks a lot Threading experts!
W
public class HybridWebViewHandler : ViewHandler<IHybridWebView, Android.Webkit.WebView>
{
...
VirtualView.RequestEvaluateJavaScript += VirtualView_RequestEvaluateJavaScript;
...
private void VirtualView_RequestEvaluateJavaScript(object sender, EvaluateJavaScriptAsyncRequest e)
{
EvaluateBack evaluateBack = new EvaluateBack();
sync.Post((o) => PlatformView.EvaluateJavascript(e.Script, evaluateBack), null);
while(!evaluateBack.Finished)
{
Thread.Sleep(100);
}
e.SetResult(evaluateBack.JavaScriptReturnValue);
}
public class EvaluateBack : Java.Lang.Object, IValueCallback
{
public bool Finished = false;
private string _JavaScriptReturnValue = null;
public string JavaScriptReturnValue
{
get { return _JavaScriptReturnValue; }
set { _JavaScriptReturnValue = value; }
}
public void OnReceiveValue(Java.Lang.Object value)
{
_JavaScriptReturnValue = value.ToString();
Finished = true;
}
}
...
}
Call:
EvaluateJavaScriptAsyncRequest request = new EvaluateJavaScriptAsyncRequest(JavaScriptCommand);
await Task.Run(() =>
{
RequestEvaluateJavaScript?.Invoke(this, request);
});
return request.Task.Result;