Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确保ExecuteScriptAsync在CefSharp中执行_C#_.net_Winforms_Cefsharp - Fatal编程技术网

C# 如何确保ExecuteScriptAsync在CefSharp中执行

C# 如何确保ExecuteScriptAsync在CefSharp中执行,c#,.net,winforms,cefsharp,C#,.net,Winforms,Cefsharp,我正在Windows Forms C#应用程序中使用组件 我在chromium浏览器中加载我的页面,加载后,我使用ExecuteScriptAsync单击其中的一个按钮并关闭表单 代码正常执行,但由于这种情况发生得非常快,我如何确保页面中的按钮被真正单击 这是我的密码: private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args) { if (!args.IsLoading)

我正在Windows Forms C#应用程序中使用组件

我在chromium浏览器中加载我的页面,加载后,我使用
ExecuteScriptAsync
单击其中的一个按钮并关闭表单

代码正常执行,但由于这种情况发生得非常快,我如何确保页面中的按钮被真正单击

这是我的密码:

private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args)
{
    if (!args.IsLoading)
    {
        chromeBrowser.ExecuteScriptAsync("document.getElementById('myButton').click();");
        form1.Close();
    }
}

谢谢。

正如文档中已经提到的,当您使用时,脚本将异步执行,因此方法将在脚本实际执行之前返回

使用
EvaluateScriptAsync
并等待调用,而不是立即返回的
ExecuteScriptAsync

如果使用,则脚本将异步执行,并且该方法返回一个封装脚本响应的任务

示例

  • 创建Windows窗体应用程序

  • 使用Configuration Manager或调试工具栏将配置设置为x64或x86

  • 安装NuGet软件包

  • 使用以下代码处理窗体的
    Load
    事件:

    ChromiumWebBrowser browser;
    private void Form1_Load(object sender, EventArgs e)
    {
        browser = new ChromiumWebBrowser("http://www.google.com");
        browser.LoadingStateChanged += async (obj, args) =>
        {
            if (!args.IsLoading)
            {
                await browser.EvaluateScriptAsync("alert(Math.sin(Math.PI/2));");
                this.Invoke(new Action(() =>
                {
                    this.Close();
                }));
            }
        };
        this.Controls.Add(browser);
    }
    
    请确保包括以下用法:

    using CefSharp;
    using CefSharp.WinForms;
    
  • 运行应用程序,您将看到表单在显示警报后将关闭,但是如果使用
    ExecuteScriptAsync
    ,表单将立即关闭,您可能看不到警报


  • 谢谢@Reza AghaeiYou,欢迎:)