EvaluateScriptAsync挂起

Edg*_*dge 3 c# asynchronous cefsharp

在CefSharp WinForms中,我试图在页面加载后使用JS获取页面的html源代码,但是应用程序正在冻结.我正在使用BackgroundWorker,相关功能如下:

void bw_DoWork(object sender, DoWorkEventArgs e)
{
    browser.Load("http://www.google.com");

    browser.FrameLoadEnd += delegate
    {
        object js = EvaluateScript(browser, "1+1");
        MessageBox.Show(js.ToString());
    };
}

object EvaluateScript(ChromiumWebBrowser b, string script)
{
    var task = b.EvaluateScriptAsync(script);
    task.Wait();
    return task.Result;
}
Run Code Online (Sandbox Code Playgroud)

Edg*_*dge 6

正如amaitland指出的那样,FrameLoadEnd通过在UI线程中运行来导致挂起.以下代码正在运行:

void bw_DoWork(object sender, DoWorkEventArgs e)
{
    first.Load("http://www.google.com");

    browser.FrameLoadEnd += delegate
    {
        Task task = new Task(() => {
            object js = EvaluateScript(browser, "document.getElementsByTagName('html')[0].innerHTML;");
            MessageBox.Show(js.ToString());
        });
        task.Start();
    };
}

static object EvaluateScript(ChromiumWebBrowser b, string script)
{
    var task = b.EvaluateScriptAsync(script);
    task.Wait();
    JavascriptResponse response = task.Result;
    return response.Success ? (response.Result ?? "") : response.Message;
}
Run Code Online (Sandbox Code Playgroud)