异常“ThreadStateException: 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.”
前言:做项目的时候在线程调用的方法内部出现了如下异常:
百度翻译如下:
解决办法如下:设置线程单元状态为STA
Thread thread = new Thread(() => HandleFile(logic_FrmDocumentScan, ucd, strImageFolder)) { IsBackground = true }; thread.SetApartmentState(ApartmentState.STA); thread.Start();
SetApartmentState 底层如下:
// // 摘要: // 在线程启动前设置其单元状态。 // // 参数: // state: // 新的单元状态。 // // 异常: // T:System.PlatformNotSupportedException: // 仅限 .NET Core:macOS 和 Linux 平台上不支持此成员。 // // T:System.ArgumentException: // state 不是有效的单元状态。 // // T:System.Threading.ThreadStateException: // 线程已启动。 // // T:System.InvalidOperationException: // 已初始化单元状态。 [SecuritySafeCritical] public void SetApartmentState(ApartmentState state);
AparmentState 枚举如下:
// // 摘要: // 指定 System.Threading.Thread 的单元状态。 [ComVisible(true)] public enum ApartmentState { // // 摘要: // System.Threading.Thread 将创建并进入一个单线程单元。 STA = 0, // // 摘要: // System.Threading.Thread 将创建并进入一个多线程单元。 MTA = 1, // // 摘要: // 尚未设置 System.Threading.Thread.ApartmentState 属性。 Unknown = 2 }
编码时遇到了这个异常,记录下,以后遇到了有个印象
不积跬步,无以至千里;不积小流,无以成江海。ヾ(◍°∇°◍)ノ゙