我很困惑我的程序如何工作,我正在使用線程(被告知要從另一個堆棧溢出答案中這樣做),以便webBrowser2.Navigate(Url);
在TestScenarios()
在GetScenarios()
到while
循環內異步運行。這一切工作正常。指定的演員表無效 - 在不同的用戶界面線程中訪問WebBrowser
現在,我添加的代碼塊注入和運行WebBrowser
控制內部一些JavaScript,但每次我打電話HtmlElement head = webBrowser2.Document
.. ..線,我得到「指定的演員是無效的錯誤。」
我知道這個錯誤有一些事情要做在單獨的UI線程中訪問WebBrowser
控件,並且無法以這種方式工作,但我對這意味着什麼以及如何修復它感到困惑。
如果您需要更多上下文,只需發表評論。
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");
}
這裏有一些東西。首先,如果不爲空webBrowser2.Document.GetElementsByTagName(「head」)[0]可以轉換爲htmlelement。其次,不應該如果(head == null)是if(head!= null) – Ehsan
@EhsanUllah不,你試圖將它轉換爲HtmlElement,但是如果失敗則返回head == null ......在這種情況下,你想寫出該對象實際上是爲了排除故障。 – Kevin
那麼typeof(頭)會是什麼? – Ehsan