在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式
用 C# 写了一个服务,为了能够方便调试,于是又写了一个 winform 程序。当我在这个程序中打开一个文件对话框时,出现了如下错误。
解决方案
通过寻找相关资料,了解到了STA单元模式和COM对象,总的来说:winform中,很多控件是COM对象,这样的对象只能被sta模式中的线程所调用。
解决办法有两种:
第一种:在主方法上加上[STAThread]特性标签
1
2
3
4
5
6
7[ ]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new LogInForm());
}第二种:将线程的单元状态设置为单线程单元,thread.SetApartmentState(ApartmentState.STA)
1
2
3Thread th = new Thread(()=> new Form1().ShowDialog());
th.SetApartmentState(ApartmentState.STA);
th.Start();
在代码里面,我的 Main 已经声明了 [STAThread]
特性,但是依然报错,我想,可能是因为是服务的问题。最后采用了第二种方法解决了。
特此记录,以免今后遗忘。
致谢
本文摘抄至:妄揽明月