【高手来看,巨难问题!200分一帖,解决再开帖。】

???2008 2005-11-06 09:45:20
我用C#写了一个dll组件,在这个组件里调用了WebBrowser控件,并且用这个控件浏览了一个网页,
这个网页地址是一个参数,由调用者提供。我在asp.net中调用这个组件时,出现线程错误,我在网上搜了一下资料,是说由于单线程单元的原因,请高手帮解答一下,有什么办法可以解决这个问题?
错误信息:
因为当前线程不在单线程单元中,故无法实例化ActiveX 控件
...全文
344 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxufewbt 2005-11-09
  • 打赏
  • 举报
回复
学习
速马 2005-11-09
  • 打赏
  • 举报
回复
还是看这个吧:http://www.codeguru.com/forum/archive/index.php/t-314239.html

ActiveX控件一般都是STA的,但也可以自己实现非标准的以支持MTA
elite2018 2005-11-08
  • 打赏
  • 举报
回复
refer to :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpovrAsynchronousDelegates.asp
yanlixin4csdn 2005-11-08
  • 打赏
  • 举报
回复
以前了遇到过.当时绕过去了.帮你顶.看有没有好的解决办法.

这两年慢慢习惯了光说不练!
elite2018 2005-11-08
  • 打赏
  • 举报
回复
所有的ActiveX控件必须要在STA(单线程)模式下来执行,因此通常这个错误是由于应用程序执行环境不止调用了一个线程。一般来说,我们都是调用异步委托来解决这个问题,不过通常由于不同的ActiveX控件的使用,会存在不同的问题
elite2018 2005-11-07
  • 打赏
  • 举报
回复
tonight I will give you answer
vipxingfa 2005-11-07
  • 打赏
  • 举报
回复
这种情况真的是第一次遇见,我也关注一下。希望有高手指点。
amendajing 2005-11-07
  • 打赏
  • 举报
回复
mark
o1o 2005-11-07
  • 打赏
  • 举报
回复
我只能学习,也来关注。
lankawangzi 2005-11-07
  • 打赏
  • 举报
回复
关注
???2008 2005-11-07
  • 打赏
  • 举报
回复
设置AspCompat是可行的,但是我想在组件里面做文章,可不可以在组件里面让它就可以在asp.net下运行?
cansum396 2005-11-07
  • 打赏
  • 举报
回复
学习
速马 2005-11-07
  • 打赏
  • 举报
回复
A Simple Example To Explain COM STA, MTA, and Auto-threaded Modules:
http://www.codeguru.com/Cpp/COM-Tech/activex/apts/print.php/c5551/
速马 2005-11-07
  • 打赏
  • 举报
回复
>>> 但是我想在组件里面做文章
没问题,如果能改COM的代码,可以直接配置为MTA(或者是全能的TNA),但你得手工处理并发冲突问题
#define _ATL_APARTMENT_THREADED

不过如果原来的COM组件是VB6写的,那别无选择,只能用STA
???2008 2005-11-07
  • 打赏
  • 举报
回复
我试过Thread.CurrentThread.ApartmentState = ApartmentState.STA
是不行的,还有别的办法吗?
timiil 2005-11-07
  • 打赏
  • 举报
回复
mark
速马 2005-11-06
  • 打赏
  • 举报
回复
ASP.NET默认的COM线程单元模型是MTA
除了楼上的办法,也可以用<%@ Page AspCompat="true" ... 设置为STA

AspCompat
When set to true, this allows the page to be executed on a single-threaded apartment (STA) thread. This allows the page to call STA components, such as a component developed with Microsoft Visual Basic 6.0. Setting this attribute to true also allows the page to call COM+ 1.0 components that require access to unmanaged Active Server Pages (ASP) built-in objects. These are accessible through the ObjectContext object or the OnStartPage method. The default is false.
Note Setting this attribute to true can cause your page's performance to degrade. For more information, see the Remarks section.
qiuji 2005-11-06
  • 打赏
  • 举报
回复
试试:
Thread.CurrentThread.ApartmentState = ApartmentState.STA
将你的线程放到一个单线程单元

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧