【问题标题】:Threading WebBrowser in C#C# 中的线程化 WebBrowser
【发布时间】:2012-09-22 17:32:40
【问题描述】:

我在一个类中有 2 个方法(login()change())。

在那个类中我还有一个属性 (webBrownser wb)

我通过线程调用login()

Thread tLogin = new Thread(b.doLogin);
tLogin.SetApartmentState(ApartmentState.STA);
tLogin.Start();

还有change()的线程方法

 Thread tLike = new Thread(b.autoLike);
 tLike.SetApartmentState(ApartmentState.STA);
 tLike.Start();

但是当change()方法尝试使用属性wb我收到这个消息:

已经与其底层 RCW 分离的 COM 对象不能被 用过。

我做错了什么?

方法与lock()同步...

【问题讨论】:

  • 您必须创建一个新的浏览器实例。旧的线程在拥有它的线程终止后就死了。

标签: c# multithreading com browser


【解决方案1】:

WebBrowser 是一个 COM(或 ActiveX)组件。除了用对象创建的线程之外,它不能用于任何其他线程。并且该线程需要有一个消息泵(例如 WinForms 中的Application.Run)。

有关如何执行此操作的更多详细信息,请参阅WebBrowser Control in a new thread

【讨论】:

  • 是的,您对线程上的WebBrowser 所做的任何事情都需要在创建它的同一线程上完成,并且该线程需要有消息泵。
猜你喜欢
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多