wang123123a
一个新的的菜鸟
采纳率31.7%
2015-10-08 01:55 阅读 2.5k

c#如何通过子线程控制主线程控件呢?

我主窗口有个webbrowser控件,想通过子线程点击已显示出来的网页实现填写的功能,要怎么实现呢?我直接写代码会出错;
求大神贴点代码!

我用主线程弄个按钮是可以点击的,就是子线程不行

错误信息:
“System.InvalidCastException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生

其他信息: 指定的转换无效。

线程代码
HtmlElement ht = webBrowser1.Document.GetElementById("J_imlis");
HtmlElementCollection ht2 = ht.GetElementsByTagName("a");
foreach (HtmlElement item in ht2)
{
ab++;
if (ab == 1)
{
item.InvokeMember("click"); //执行点击

break;
}
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • wang123123a 一个新的的菜鸟 2015-10-08 01:58

    我用主线程弄个按钮是可以点击的,就是子线程不行

    错误信息:
    “System.InvalidCastException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生

    其他信息: 指定的转换无效。

    线程代码
    HtmlElement ht = webBrowser1.Document.GetElementById("J_imlis");
    HtmlElementCollection ht2 = ht.GetElementsByTagName("a");
    foreach (HtmlElement item in ht2)
    {
    ab++;
    if (ab == 1)
    {
    item.InvokeMember("click"); //执行点击

    break;
    }
    }

    点赞 评论 复制链接分享
  • liaoxing168 这个还能被注册? 2015-10-19 09:46

    我记得好像是为了线程安全,所以控件只能被创建的线程所调用。所以子线程是不能操作webBrowser1及其所属控件的。

    点赞 评论 复制链接分享

相关推荐