Cefsharp Offscreen EvaluateScriptAsync

Я использовал Cefsharp Winforms, и недавно я пытался переключиться на Offscreen. Все работает просто отлично, за исключением того, что теперь мой код не ждет завершения EvaluateScriptAsync, прежде чем возвращает исходный код страницы.

Или, может быть, я просто не совсем понимаю, как эта задача работает. Вот мой прогресс на данный момент:

private static void WebBrowserFrameLoadEnded(object sender, FrameLoadEndEventArgs e)
{
    var browser = (CefSharp.OffScreen.ChromiumWebBrowser)sender;

    if (e.Frame.IsMain)
    {
        browser.FrameLoadEnd -= WebBrowserFrameLoadEnded;

        var x = browser.EvaluateScriptAsync("/* some javascript codes */");

        if (x.IsCompleted && x.Result.Success)
        {
            x.ContinueWith(a =>
            {
                var task = browser.GetSourceAsync();

                task.ContinueWith(d =>
                {
                    if (d.IsCompleted)
                    {
                        globalRtnVal = d.Result;
                    }
                }).ConfigureAwait(false);
            });
        }
    }
}

И мой основной код выглядит так:

/* some codes */

CefSharp.OffScreen.ChromiumWebBrowser asd = new CefSharp.OffScreen.ChromiumWebBrowser(/* url */);
asd.BrowserSettings.Javascript = CefSharp.CefState.Enabled;
asd.BrowserSettings.WebSecurity = CefSharp.CefState.Disabled;

asd.FrameLoadEnd += WebBrowserFrameLoadEnded;

int tryCount = 0;

do
{
    Thread.Sleep(3000);

    RtnHtml = globalRtnVal;

    if (String.IsNullOrEmpty(RtnHtml))
        tryCount++;

    if (tryCount == 10 && String.IsNullOrEmpty(RtnHtml))
    {
        /* some codes */
        return null;
    }
}
while (String.IsNullOrEmpty(RtnHtml));

/* some codes */

0 ответов

Другие вопросы по тегам