我有一个解析一些网站的dll。此组件使用来自Windows窗体的WebBrowser控件并使用Navigate()方法。
此外,我在IIS 7中使用了基本的HttpBinding进行WCF托管。
但是当我调用我的WCF方法从客户端使用带有WebBrower的dll时,我有这样的错误消息:
ActiveX控件'8856f961-340a-11d0-a96b-00c04fd705a2'无法实例化,因为当前线程不在单线程单元中。
有办法解决这种不愉快的情况吗?
答案 0 :(得分:0)
幸运的是,我找到了问题的答案。这段代码帮助我:
[STAThread]
public Good GrabGood(string link)
{
_link = link;
var t = new Thread(Grab);
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
return _good;
}
private Good _good;
private string _link;
private void Grab()
{
var grabber = new GoodsGrabber();
try
{
_good = grabber.GrabGood(_link);
}
catch (Exception)
{
_good = null;
throw;
}
}
这类的属性如:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerSession)]
在任何选项中,变体都没有帮助我。