当前线程不在单线程单元中,因此无法实例化 ActiveX 控件的解决方案

错误信息:

{"当前线程不在单线程单元中,因此无法实例化 ActiveX控件“3c33f325-cd56-4005-9e34-d0c6ab70b1eb”。"}

 

解决方案:

1、在主线程中实例化此ActiveX控件

2、将创建此Active控件的线程设定为单线程。

      Thread.ApartmentState 获取或设置此线程的单元状态。

            serviceFormThread = new Thread(MainFormMessageThread);

           serviceFormThread.ApartmentState =ApartmentState.STA;         //最关键的一句

            serviceFormThread.Name = "InfraServiceThread";

            serviceFormThread.Start();

         当您启动托管的线程由默认线程不进入任何COM 单元。 从线程进行第一个 COM 调用时,托管的线程隐式进入公寓。默认,托管的线程进入多线程的单元 (MTA) 进程。 托管的线程进入 COM 单元后,它不能将保留,并输入另一个单元。 可以通过以下方法之一来使输入单线程单元(STA) 的托管的线程:

  1. 应用程序的主方法上指定 [STAThread] 指令。 将此方法在执行时 ApartmentState 属性设置为该线程为 STA
  2. 设置 System.Threading.ApartmentState.STA     Thread.ApartmentState 。     这将导致线程输入一个 STA。 如果将 Thread.ApartmentState 设置为System.Threading.ApartmentState.MTA ,该线程将进入 MTA。
  1. 使用在 AspCompat     ="true"     ASPX 页上页指令,以使线程输入一个 STA中的属性。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值