DotNetBrowser DOMNode调试

时间:2017-10-18 02:15:08

标签: c# debugging visual-studio-2017 dotnetbrowser

我正在使用DotNetBrowser,或者至少尝试过,我试图获取文档中的所有复选框。

public static void SetCodecSettings()
    {
        var waitEvent = new ManualResetEvent(false);
        _mf.Browser.FinishLoadingFrameEvent += delegate(object sender, FinishLoadingEventArgs e)
        {
            if (e.IsMainFrame)
            {
                waitEvent.Set();
                var doc = _mf.Browser.GetDocument();
                var html = _mf.Browser.GetHTML();
                var checkBoxes = doc.GetElementsByTagName("input");
            }
        };
        _mf.Browser.LoadURL(_mf.PattonDeviceUrl + "/codecset.htm");
        waitEvent.WaitOne();
    }

当我输入断点时,我可以检查checkBoxes中的所有内容,在调试器中展开checkBox时出现以下错误: enter image description here

我不想关闭属性评估,因为我想检查该项目的内容。有关如何纠正此问题的任何建议吗?

1 个答案:

答案 0 :(得分:3)

Chromium引擎在一个单独的过程中运行。 DotNetBrowser库使用多个线程在Chromium引擎和.NET端之间交换数据。几乎所有评估都涉及IPC,因为DotNetBrowser本身不执行任何数据缓存。

当Visual Studio在某个断点处停止应用程序时,某些DotNetBrowser线程将暂停。在这种情况下,库无法从Chromium进程获取数据和处理请求。这就是您无法在调试器中计算表达式的原因。

在调试多进程应用程序时,这个问题很常见,而不仅仅是DotNetBrowser。作为一种解决方法,您可以使用日志记录在运行时显示所需的数据。

以下文章解释了观察到的行为:

https://dotnetbrowser.support.teamdev.com/support/solutions/articles/9000117030--the-function-evaluation-requires-all-threads-to-run-message-in-debugger-or-quick-watch