C# CefSharp使用DevToolsClient执行方法后,调用Wait()函数等待,是否会导致程序卡死亡?

C# CefSharp使用DevToolsClient执行方法后,调用Wait()函数等待,是否会导致程序卡死亡?,c#,cefsharp,C#,Cefsharp,CefSharp版本:86.0.241.0 .Net Framework 4.5.2 我是C#的新手,英语不好。很抱歉 尝试多种方法来实现: private void button18_Click(object sender, EventArgs e) { //1 DevToolsClient devTool = chromiumWebBrowser1.GetBrowser().GetDevToolsClient(); devTool.ExecuteDevToolsMet

CefSharp版本:86.0.241.0
.Net Framework 4.5.2
我是C#的新手,英语不好。很抱歉 尝试多种方法来实现:

private void button18_Click(object sender, EventArgs e)
{
    //1
    DevToolsClient devTool = chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
    devTool.ExecuteDevToolsMethodAsync("Browser.getVersion").Wait();// stuck
    
    //2
    DevToolsClient dev = DevToolsExtensions.GetDevToolsClient(chromiumWebBrowser1);
    dev.ExecuteDevToolsMethodAsync("Browser.getVersion").Wait();// stuck
    
}
// load complete after:
chromiumWebBrowser1.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(new Action<object, FrameLoadEndEventArgs>((s, ea) => {
    IBrowser browser = chromiumWebBrowser1.GetBrowser();
    DevToolsClient devTool = chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
    //devTool.Browser.GetVersionAsync().Wait();      //execute nomal
    devTool.DOM.GetDocumentAsync().Wait();  // stuck
}));
//
private void button1_Click(object sender, EventArgs e)
{
    DevToolsClient devTool = chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
    //devTool.Page.ReloadAsync();  //nomal  page reload
    devTool.Page.ReloadAsync().Wait(); // stuck
}
private void按钮18_单击(对象发送者,事件参数e)
{
//1
DevToolsClient devTool=chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
devTool.executevToolsMethodAsync(“Browser.getVersion”).Wait();//卡滞
//2
DevToolsClient dev=DevToolsExtensions.GetDevToolsClient(chromiumWebBrowser1);
dev.executeveToolsMethodAsync(“Browser.getVersion”).Wait();//卡滞
}
//加载完成后:
chromiumWebBrowser1.FrameLoadEnd+=新事件处理程序(新操作((s,ea)=>{
IBrowser browser=chromiumWebBrowser1.GetBrowser();
DevToolsClient devTool=chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
//devTool.Browser.GetVersionAsync().Wait();//执行正常
devTool.DOM.GetDocumentAsync().Wait();//卡滞
}));
//
私有无效按钮1\u单击(对象发送者,事件参数e)
{
DevToolsClient devTool=chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
//devTool.Page.ReloadAsync();//正常页面重新加载
devTool.Page.ReloadAsync().Wait();//卡滞
}

除了在FrameLoadEnd事件中成功访问Browser.GetVersionAsync()。

还找到了一个解决方案!请使用async/Wait solve

private async void button1_Click(object sender, EventArgs e)
{
    DevToolsClient devTool = chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
    DevToolsMethodResponse resp = await devTool.ExecuteDevToolsMethodAsync("DOM.getDocument");
    Console.WriteLine(resp.ResponseAsJsonString);
}
最终解决办法:

//global variable
DevToolsClient devTool = null;
//Should be obtained at initialization time DevToolsClient,And only get it once
//Each call to GetDevToolsClient() messageId resets
chromiumWebBrowser1.IsBrowserInitializedChanged += new EventHandler(delegate {
    devTool = chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
});
//Common execution method  method: CDP method name ,param: method param
public async Task<string> ExecuteDevToolsMethods(string method, IDictionary<string, object> param = null)
{
    DevToolsMethodResponse resp = await devTool.ExecuteDevToolsMethodAsync(method, param);
    return resp.ResponseAsJsonString;
}
//call 
private void button3_Click(object sender, EventArgs e)
{
    ExecuteDevToolsMethods("DOM.getDocument").ContinueWith(new Action<Task<string>>((result) => {
        Console.WriteLine(result.Result);
    }));
}
if Please point out if I have misunderstood,very thank!
//全局变量
devTool客户端devTool=null;
//应在DevToolsClient初始化时获取,并且只获取一次
//每次调用GetDevToolsClient()messageId都会重置
chromiumWebBrowser1.IsBrowserInitializedChanged+=新事件处理程序(委托{
devTool=chromiumWebBrowser1.GetBrowser().GetDevToolsClient();
});
//常用执行方法:CDP方法名称,参数:方法参数
公共异步任务ExecuteDevToolsMethods(字符串方法,IDictionary参数=null)
{
DevToolsMethodResponse resp=等待devTool.executevetoolsmethodasync(方法,参数);
返回resp.ResponseAsJsonString;
}
//召唤
私有无效按钮3\u单击(对象发送者,事件参数e)
{
ExecuteDevToolsMethods(“DOM.getDocument”)。继续执行(新操作((结果)=>{
Console.WriteLine(result.result);
}));
}
如果有误解请指出,非常感谢

干得好!这里可以找到一些解释