当前位置:网站首页>C#(Winform) 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件
C#(Winform) 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件
2022-07-05 16:40:00 【coder i++】
转载:https://blog.csdn.net/qq_37508511/article/details/82770349
1、在主线程中实例化此ActiveX控件
2、将创建此Active控件的线程设定为单线程。
Thread.ApartmentState 获取或设置此线程的单元状态。
thread = new Thread(Mehtod);
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
或者线程池也可以
ThreadPool.QueueUserWorkItem(new WaitCallback(functionname),obj);
如果不在单线程单元中,那就声明为单线程单元
给Main函数加上[STAThread]
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
}
}
在 .NET Framework 1.0 版和 1.1 版中,ApartmentState 属性将线程标记为指示将在单线程单元或多线程单元中执行。当线程处于 Unstarted 或 Running 线程状态时,可以设置此属性;但一个线程只能设置此属性一次。如果尚未设置此属性,则它将返回 Unknown。
在 .NET Framework 2.0 版中,如果在启动新线程之前尚未设置它们的单元状态,则这些新线程将初始化为ApartmentState.MTA。默认情况下,主应用程序线程初始化为 ApartmentState.MTA。无法再通过在第一行代码上设置 System.Threading.ApartmentState 属性将主应用程序线程设置为 ApartmentState.STA。应改用 STAThreadAttribute。
在 .NET Framework 1.0 和 1.1 版中,可以通过使用 System.Threading.ApartmentState 属性在线程运行之后设置单元状态;这样会创建争用条件。在 .NET Framework 2.0 版中,这是不允许的。
COM 组件使用单元来同步对资源的访问。与之相对,托管对象使用同步区域、同步基元和同步上下文来确保以线程安全的方式使用所有共享资源,其中同步基元指互斥体、锁和完成端口等对象。有关 .NET 线程模型的其他信息,请参见托管线程处理。
为了实现互用性,公共语言运行库将在调用 COM 对象时创建一个单元并将其初始化。托管线程可以创建并进入只包含一个线程的单线程单元 (STA) 或包含一个或多个线程的多线程单元 (MTA)。当 COM 单元与线程所生成的单元兼容时,COM 将允许调用线程直接调用 COM 对象。如果这两种单元不兼容,COM 将创建一个兼容的单元并通过代理将所有调用封送在新的单元中。
运行库调用 CoInitializeEx 将 COM 单元初始化为 MTA 或 STA 单元。在 .NET Framework 2.0 版中,如果未在启动线程之前设置托管线程的单元状态,则托管线程会被初始化为 MTA。在启动线程之前可使用 SetApartmentState 或 TrySetApartmentState 方法设置单元状态。
在 .NET Framework 2.0 版中,除非将 STAThreadAttribute 应用于入口点过程,否则主应用程序线程会被初始化为 MTA。
下表将列出 ApartmentState 枚举值并显示可比的 COM 单元初始化调用。
ApartmentState 枚举值 | COM 单元初始化 |
|---|---|
MTA | CoInitializeEx(NULL, COINIT_MULTITHREADED) |
STA | CoIntializeEx(NULL, COINIT_APARTMENTTHREADED) |
未知 | CoInitializeEx(NULL, COINIT_MULTITHREADED) |
边栏推荐
- What else do you not know about new map()
- CMake教程Step6(添加自定义命令和生成文件)
- 7.Scala类
- tf. sequence_ Mask function explanation case
- 关于new Map( )还有哪些是你不知道的
- [Jianzhi offer] 63 Maximum profit of stock
- URP下Alpha从Gamma空间到Linner空间转换(二)——多Alpha贴图叠加
- 网上办理期货开户安全吗?网上会不会骗子比较多?感觉不太靠谱?
- 国内首家 EMQ 加入亚马逊云科技「初创加速-全球合作伙伴网络计划」
- The two ways of domestic chip industry chain go hand in hand. ASML really panicked and increased cooperation on a large scale
猜你喜欢

Read the basic grammar of C language in one article

Embedded-c Language-2

dried food! Semi supervised pre training dialogue model space

CMake教程Step4(安装和测试)

First day of learning C language

Android privacy sandbox developer preview 3: privacy, security and personalized experience

composer安装报错:No composer.lock file present.

American chips are no longer proud, and Chinese chips have successfully won the first place in emerging fields

IDC报告:腾讯云数据库稳居关系型数据库市场TOP 2!

Deep learning plus
随机推荐
China Radio and television officially launched 5g services, and China Mobile quickly launched free services to retain users
飞桨EasyDL实操范例:工业零件划痕自动识别
【微信小程序】一文读懂小程序的生命周期和路由跳转
[Jianzhi offer] 63 Maximum profit of stock
Embedded-c Language-2
Cs231n notes (bottom) - applicable to 0 Foundation
[729. My schedule I]
【剑指 Offer】62. 圆圈中最后剩下的数字
Keras crash Guide
Practical example of propeller easydl: automatic scratch recognition of industrial parts
CMake教程Step3(添加库的使用要求)
C# TCP如何设置心跳数据包,才显得优雅呢?
Thoughtworks 全球CTO:按需求构建架构,过度工程只会“劳民伤财”
麻烦问下,DMS中使用Redis语法是以云数据库Redis社区版的命令为参考的嘛
The first EMQ in China joined Amazon cloud technology's "startup acceleration - global partner network program"
Is it safe to open futures accounts online? Will there be more liars online? Doesn't feel very reliable?
Embedded -arm (bare board development) -1
Is it safe for qiniu business school to open a stock account? Is it reliable?
【testlink】TestLink1.9.18常见问题解决方法
【性能测试】全链路压测