c#InvalidCastException

时间:2010-06-17 17:33:16

标签: c# .net

我尝试使用此代码:

webBrowser.Document.GetElementById("login").SetAttribute("value", "user");

它工作得很好但不是我在新线程中使用它时。我得到一个InvalidCastException。我该怎么办?

2 个答案:

答案 0 :(得分:0)

webBrowser必须是GUI元素,并且大多数GUI元素都不能很好地处理多线程。您通常只应访问应用程序主UI线程上的GUI对象。

将调用委托给UI线程的最简单方法是使用Dispatcher.Invoke

答案 1 :(得分:0)

这应该有效:

delegate void ActionExecutorOnUI(ref HtmlElement a, string b, string c);
private void SetValueOnHtmlElementOnUIThread(this HtmlElement onElement, string propToChange, string valueGiven, WebBrowser linkToWebBrowser)
        {
            if (linkToWebBrowser.InvokeRequired)
            {
                ActionExecutorOnUI d = new ActionExecutorOnUI(SetValueOnHtmlElementOnUIThread);
                linkToWebBrowser.Invoke(d, new object[] { });
            }
            else
                SetValueOnHtmlElementOnUIThread(ref onElement, propToChange, valueGiven);

        }

private void SetValueOnHtmlElementOnUIThread(ref HtmlElement onElement, string propToChange, string valueGiven)
        {
            onElement.SetAttribute("value", "user"); 
        }