BLOG zzy.my

合抱之木, 生于毫末; 九层之台, 起于累土; 千里之行, 始于足下。

在可以调用 OLE 之前 错误

错误内容:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记
引起原因:多线程异步调用或者创建新窗体时,出现该错误

解决方法:

1、修改main函数 ,前面添加[STAThread]标示(貌似IDE默认)
[STAThread]
static void Main()

 

2、在线程创建处设置模式属性ApartmentState
例如:
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(SaveName));
t.SetApartmentState(ApartmentState.STA);//或者t.ApartmentState =ApartmentState.STA
t.Start();

 

备注:
STA: Single-Thread Apartment, 中文叫单线程套间。就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联。这个内存结构针对每个线程都会有一个。支持STA的COM对象只能在创建它的线程里被使用,其它线程如果再创建它就会失败。

MTA: Mutil-Thread Apartment,中文叫多线程套间。COM库在进程中创建一个内存结构,这个内存结构在整个进程中只能有一个,然后让它和调用CoInitializeEx的线程相关联。支持MTA的COM对象可以在任意线程里被使用。多有针对它的调用都会被封装成为消息。

Loading