【疑难】在单线程中模拟多线程的工作模式(上)

      先写在这里吧,这段时间工作忙,私事又多,过两天再完整地写下去...

 

      今天抽点时间写点内容。

      有一次项目中,WinForm上需要旋放置某基于COM组件的ActiveX控件,开始只是制作成DLL项目,后来根据客户要求,要被作为Web服务将这个DLL项目发布出来,但这时就遇到了COM组件的单线程问题。

       COM组件,尤其是必须依附WinForm而存在的ActiveX控件,必须与WinForm同样,在单线程中运行(一般情况下,咱们会看到程序入口的Main方法上加有[STAThread]的特性,以表明该程序要以单线程套间的方式运行)。

      DLL项目中,因为WinForm直接存在,所以使用COMActiveX)完全没有问题,编译完后,直接在本地运行自成的exe文件(窗体)即可。而换成发布为Web服务,就不是那么简单的事了(也可说成是前端的Web项目调用后台的DLL项目)。

      从Web端调用后台DLL(调试时必须要先按一下F11才能进入后台DLL里代码,不然直接按F5,即使后台某处有断点也无法进入,之后F5F11呀怎样都可以)中某公共方法,进入DLL代码,创建WinForm实例(Form1 form = new Form1()),即可发现ActiveX控件的对象已经被实例化,这里咱们可以像之前调试DLL项目那样正常进行;但如果该被调用的公共方法结束后返回Web端,再次调另外的公共方法进入DLL代码时,ActiveX控件就会抛出“COM对象与其基础RCW分开后不能再使用该对象”之类的异常,也就是说此时ActiveX控件已经与WinForm分离开了,接下来根本无法再次使用。

      这个问题上网发了贴,查了国外的网站,花了近两周时间,焦头烂额,终于被我在某国外网站上找到了解决的办法。

      http://home.infusionblogs.com/thunter/Lists/Posts/Post.aspx?ID=18

       …困死了,过两天有空了再接着写吧,个别代码点的分析也一起写出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值