我正在使用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中的所有内容时,在调试器中扩展checkBoxes时会出现以下错误:
我不想关闭属性评估,因为我想检查该项目的内容。关于如何纠正这一点的任何建议?
最佳答案
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