main() 前面有 [STAThread]
Thread.CurrentThread.ApartmentState = ApartmentState.STA; Debug.WriteLine(Thread.CurrentThread.ApartmentState);
// 这里还是显示是 MTA
Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
// 这里会出异常:Failed to set the specified COM apartment state.
Debug.WriteLine(Thread.CurrentThread.GetApartmentState());
// 把上面那行去掉,这里还是显示 MTA
if (openFileDialog.ShowDialog() == DialogResult.OK)
// 异常:Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process.
这是为什么呢?
是不是补丁没有安装呢?
建议先安装下这个补丁试试
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=26662
可能是BUG引起的,在VS2008测试了一下,没有上述的问题,建议安装补丁
这样设置试试看!!
[STAThread] static void Main()
Thread app = new Thread(new ParameterizedThreadStart(ThreadMethod)); app.ApartmentState = ApartmentState.STA;
或Thread newThread = new Thread(new ThreadStart(ThreadMethod)); newThread.SetApartmentState(ApartmentState.MTA);