如何在不阻塞主线程的情况下等待回调

时间:2017-04-28 13:31:00

标签: c# multithreading xamarin xamarin.android xamarin.forms

我需要在Android的自定义渲染器中使用WebView,并且需要使用EvaluateJavascript获取值:

class ValueCallback : Java.Lang.Object, IValueCallback
{
    public Java.Lang.Object Value
    {
        get;
        set;
    }

    public void OnReceiveValue(Java.Lang.Object value)
    {
        Value = value;
    }
}

这是从Renderer中的Method调用的,它在Turn中从诸如Duration

之类的属性中调用
public double Duration;

从Webview获取持续时间:

var callback = new ValueCallback();
View.EvaluateJavascript(jsToExecute, callback);
//How to wait here without blocking the MainThread?

问题是只能从MainThread调用EvaluateJavascript 并且还从MainThread调用该属性。 因此,当我使用AutoResetEvent之类的东西等待脚本完成时,结果就是死锁。

1 个答案:

答案 0 :(得分:0)

您正在询问如何在不阻塞主线程的情况下阻止主线程。答案非常简单,你不能

如果您不想阻止主线程,您将需要不等待,而是在回调执行后执行您希望发生的任何事情在回调中而不是等待它。