我对我的程序如何工作感到困惑。我正在使用线程(从另一个 Stack Overflow 答案中被告知这样做),以便webBrowser2.Navigate(Url);
in在循环中TestScenarios()
异步运行。这一切都很好。while
GetScenarios()
WebBrowser
现在,我添加了一段代码来在控件内注入和运行一些 javascript 。但是,每次我调用HtmlElement head = webBrowser2.Document
.... 行时,都会收到“Specified cast is not valid error”。
我知道这个错误与WebBrowser
在单独的 UI 线程中访问的控件有关,并且无法以这种方式工作,但我对这到底意味着什么以及如何修复它感到困惑。
如果您需要更多上下文,请发表评论。
public void GetScenarios()
{
new Thread(() =>
{
while() {
...
TestScenarios();
}
}).Start();
}
TestScenarios() {
...
Action action = () =>
{
webBrowser2.Tag = signal;
webBrowser2.Navigate(Url);
webBrowser2.DocumentCompleted -= WebBrowserDocumentCompleted;
webBrowser2.DocumentCompleted += WebBrowserDocumentCompleted;
};
webBrowser2.Invoke(action);
signal.WaitOne();
...
//Run some javascript on the WebBrowser control
HtmlElement head = webBrowser2.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser2.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
element.text = "function sayHello() { alert('hello') }";
head.AppendChild(scriptEl);
webBrowser2.Document.InvokeScript("sayHello");
}